WinSock 是 Windows 平台網路程式設計的標準 API,基於 Berkeley Socket 擴充而來,支援多種協定族(以 TCP/IP 為主)。本文介紹 WinSock 架構分層、Socket 類型(串流/資料報)、通訊域、客戶端/伺服器模型、廣播機制與位元組序處理,為後續 API 實作奠基。
應用程式
│ 調用 WinSock API (socket, bind, connect, send, recv...)
▼
WinSock DLL (ws2_32.dll) ← 統一介面,轉發至特定協定供應商
│
▼
協定供應商 (TCP/IP, IPX/SPX, AppleTalk...)
│
▼
網路驅動程式 / NDIS
│
▼
實體網路硬體
應用程式只需連結 `ws2_32.lib`,即可在任何安裝相容 WinSock 供應商的系統上執行。
| 類型 | 協定範例 | 特性 |
|---|---|---|
| 串流 Socket (SOCK_STREAM) | TCP | 連線導向、可靠、雙向、有序、無記錄邊界、流量控制 |
| 資料報 Socket (SOCK_DGRAM) | UDP | 無連線、不可靠、無序、可能重複、保留記錄邊界、支援廣播 |
WinSock 1.1 僅支援 Internet 域 (AF_INET),使用 TCP/IP 協定族。WinSock 2 擴充支援其他域(如 `AF_IPX`、`AF_APPLETALK`)。
協定可對稱(如 TELNET,雙方均可發起)或非對稱(如 FTP,客戶端發起控制連線,伺服器建立資料連線)。
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2,2), &wsaData) != 0) { /* 錯誤處理 */ }
// ... 使用 socket API ...
WSACleanup();
`MAKEWORD(2,2)` 要求 WinSock 2.2 版。檢查 `wsaData.wVersion` 確認實際版本。