Windows Sockets(Winsock)規範為 Microsoft Windows 定義了二進制兼容的網絡編程接口,基於 BSD UNIX 4.3 版套接字實現並針對 Windows 進行擴展。本文系統闡述套接字的核心概念、數據類型、分類特性及適用場景,為網絡編程建立清晰的認知框架。
CSocket(高級抽象)、CAsyncSocket(底層封裝)核心宗旨:抽象底層網絡協議細節,使開發者無需深諳協議內幕,編寫的應用程序可在任何支持套接字的網絡上運行。這也是套接字成為「信息高速公路」Internet 通信首選方式的原因。
套接字是 通信端點,是 Windows Sockets 應用程序在網絡上發送或接收數據包的對象。具有以下屬性:
兩種套接字類型均為雙向通信,支持同時雙向傳輸(全雙工)。
特徵:
類比:如電話通話,雙方建立連接後對話順序固定、無遺漏重複。
特徵:
類比:如寄明信片,獨立投遞,可能丟失、亂序、重複。
| 維度 | 流式套接字 (SOCK_STREAM) | 數據報套接字 (SOCK_DGRAM) |
|---|---|---|
| 協議基礎 | TCP | UDP |
| 連接性 | 面向連接 | 無連接 |
| 可靠性 | 可靠(ACK/重傳/排序) | 不可靠 |
| 數據邊界 | 無(字節流) | 有(消息邊界) |
| 雙工模式 | 全雙工 | 全雙工 |
| 廣播支持 | 不支持 | 支持 |
| 開銷 | 較大(頭部20B+狀態機) | 極小(頭部8B) |
| 典型應用 | Web、文件、郵件、Shell | DNS、流媒體、遊戲、廣播 |
每個 MFC 套接字對象(CSocket/CAsyncSocket)封裝一個 Windows Sockets 句柄,類型為 SOCKET。類似於窗口句柄 HWND,MFC 類提供對封裝句柄的操作方法。Platform SDK 中有詳細定義。
MFC 使用提示:最適合雙端均使用 MFC 的場景。與非 MFC 應用通信時需注意字節序轉換(參見 Windows Sockets:字節排序)。
| 類別 | 特點 | 適用場景 |
|---|---|---|
CSocket | 高級抽象,阻塞模式(後台處理消息),內建 CArchive 序列化支持,僅支持流式套接字 | 快速開發、雙端可控、需對象序列化傳輸 |
CAsyncSocket | 底層薄封裝,異步通知(回調/消息),支持流式/數據報,無序列化支持 | 高性能、精細控制、數據報應用、非 MFC 互操作 |
重要限制:CSocket 僅支持流式套接字。若指定 SOCK_DGRAM,MFC 斷言失敗。數據報套接字不可靠特性與序列化可靠性要求衝突,故 CArchive 不適用於數據報。
Windows Sockets 通過標準化的套接字抽象,屏蔽了協議棧的複雜性。理解流式與數據報套接字的本質差異、選擇合適的 MFC 封裝類、掌握適用場景,是高效進行 Windows 網絡編程的基石。後續將深入探討流式套接字、數據報套接字及帶存檔套接字的具體編程實戰。