TCP
TCP Transmission Control Protocol 傳輸控制協議,意爲對數據傳輸過程的控制。
TCP/IP 協議棧
TCP/IP 協議棧分四層:
- 應用層
- TCP層/UDP層
- IP層
- 鏈路層
根據2.的TCP套接字還是UDP套接字收發數據,他們的協議棧各不相同。
鏈路層
物理連接領域標準化的結果,是最基本的領域,定義LAN、WAN、MAN等網絡標準。
IP層
IP本身是面向消息、不可靠的協議,每次傳輸數據他來選擇路徑,但並不一致,如若發生路徑錯誤,則會選擇其他路徑;若數據丟失,則無法解決。
TCP層/UDP層
TCP保證可靠的數據傳輸,他發送數據時以IP層爲基礎。
UDP則不保證數據傳輸的可靠性。
根據應用性質選擇使用TCP/UDP層。
應用層
根據程序特點性質決定服務器和客戶端之間的數據傳輸規則。
基於TCP服務器端/客戶端
socket() | bind() | listen() | accept() |
read()/write() Linux recv()/send() Windows |
close() |
創建套接字 | 分配套接字地址 | 等待連接請求狀態 | 允許連接 | 數據交換 | 斷開連接 |
listen()進入等待連接請求狀態
SOCKET hServerSock;
//......
listen(hServerSock, 5);//Windows
第一個參數:套接字的句柄。
第二個參數,等待隊列的長度,這裏的5表示最多五個鏈接請求進入隊列。
實現迭代服務器/客戶端
第一章中,服務器處理了一次客戶端的連接請求就結束了運行,listen()中第二個參數沒有多大意義。
爲了多次處理,需要編寫迭代服務器端/客戶端。
回聲(echo)服務端/客戶端
socket() | bind() | listen() | accept() |
read()/write() Linux recv()/send() Windows |
close() |
創建套接字 | 分配套接字地址 | 等待連接請求狀態(回到這裏) | 允許連接 | 數據交換 | 斷開連接(回到listen()運行後狀態) |
代碼: