基於TCP UDP的socket程式設計

2021-09-24 20:51:29 字數 1268 閱讀 8550

基於tcp(面向連線)的socket程式設計

伺服器端順序: 

1. 建立套接字(socket) 

2. 將套接字繫結到乙個本地位址和埠上(bind) 

3. 將套接字設為監聽模式,準備接收客戶請求(listen) 

4. 等待客戶請求的到來;當請求帶來後,接受連線請求,返回乙個新的對應於此次連線的套接字(accept) 

5. 用返回的套接字和客戶端進行通訊(send/recv) 

6. 返回,等待另乙個客戶請求 

7. 關閉套接字(closesocket)

客戶端程式: 

1. 建立套接字(socket) 

2. 向伺服器傳送連線請求(connect) 

3. 和伺服器端進行通訊(send/recv) 

4. 關閉套接字(closesocket)

tcp建立連線的三次握手發生在socket的那幾個函式中呢?請看下圖:

從圖中可以看出,當客戶端呼叫connect時,觸發了連線請求,向伺服器傳送了syn j包,這時connect進入阻塞狀態;伺服器監聽到連線請求,即收到syn j包,呼叫accept函式接收請求向客戶端傳送syn k ,ack j+1,這時accept進入阻塞狀態;客戶端收到伺服器的syn k ,ack j+1之後,這時connect返回,並對syn k進行確認;伺服器收到ack k+1時,accept返回,至此三次握手完畢,連線建立。

總結:客戶端的connect在三次握手的第二個次返回,而伺服器端的accept在三次握手的第三次返回。

基於udp(面向無連線)的socket程式設計 

伺服器端(接收端)程式: 

1. 建立套接字(socket) 

2. 將套接字繫結到乙個本地位址和埠上(bind) 

3. 等待接收資料(recvfrom) 

4. 關閉套接字(closesocket) 

客戶端(傳送端)程式 

1. 建立套接字(socket) 

2. 向伺服器傳送資料(sendto) 

3. 關閉套接字(closesocket)

如何用udp協議實現tcp協議?

一點思路:使用udp協議在資料報裡新增tcp的頭部使其能夠實現tcp的基本功能,包括重傳,滑動視窗,慢開始和擁塞控制,滑動視窗的大小可以通過命令列指定。即應用層再封裝乙個tcp報頭,然後解析的時候在協議棧裡面把偏移多偏幾個位元組。

基於TCP UDP的socket程式設計

基於tcp 面向連線 的socket程式設計 伺服器端順序 1.建立套接字 socket 2.將套接字繫結到乙個本地位址和埠上 bind 3.將套接字設為監聽模式,準備接收客戶請求 listen 4.等待客戶請求的到來 當請求帶來後,接受連線請求,返回乙個新的對應於此次連線的套接字 accept 5...

socket程式設計(TCP UDP)

linux下的socket程式設計大體上包括tcp socket udp socket即raw socket這三種,其中tcp和udp方式的socket程式設計用於編寫應用層的socket程式,是我們用得比較多的,而raw socket則用得相對較少,不在本文介紹範圍之列。tcp socket 基於...

TCP,UDP協議下的socket通訊

server端 建立套接字 socket 建立sockaddr in結構體變數,並設定相關引數 將套接字與ip 埠繫結 bind 使套接字處於監聽狀態,等待client端發起連線請求 listen 取接收請求,並生成已連線socket描述符 accept 進行網路讀寫操作 read write re...