首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Beej's Guide 系列連載 02:Socket 概念與兩大類型

     編輯:關於C語言

什麼是 Socket?

Socket 是使用標準 Unix 檔案描述符(file descriptor)與其他程式通訊的介面。Unix 哲學:「一切皆檔案」——網路連線、管道、終端、磁碟檔案,對程式來說都是讀寫一個整數描述符。

取得網路 Socket 描述符

呼叫 socket() 系統呼叫,回傳 socket descriptor,再用 send()/recv() 或 read()/write() 收發資料。send/recv 提供更多控制旗標(如 MSG_DONTWAIT)。

Internet Socket 兩大類型

類型常數特性協定典型應用
流式套接字SOCK_STREAM可靠、雙向、有序、無錯誤、連線導向TCPTelnet, HTTP, SSH, FTP
資料報套接字SOCK_DGRAM不可靠、無序、無連線、保留邊界UDPDNS, TFTP, BOOTP, 即時影音

Stream Socket (TCP)

  • 發送「1, 2」對方必收到「1, 2」,絕不會亂序或遺失。
  • 內建流量控制、擁塞控制、重傳機制(RFC 793)。
  • telnet www.example.com 80 後輸入 GET / HTTP/1.0 即可拿到網頁原始碼。

Datagram Socket (UDP)

  • 「發後即忘」:封裝資料 + 目標 IP/Port → sendto(),無連線建立過程。
  • 可能丟包、重複、亂序;應用層需自行實作 ACK/重傳(如 TFTP)。
  • 適合「寧可丟包也要低延遲」場景:遊戲、VoIP、直播。

封裝層次觀念

資料從應用層下發,每層加上標頭:

Application (TFTP) → Transport (UDP) → Network (IP) → Link (Ethernet) → Physical

接收端反向剝離。程式設計師只需關注應用層資料,下層由核心與硬體處理。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved