基於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...