本文描述流式套接字,它是兩種可用的 Windows Sockets 類型中的一種。(另一種類型是數據文報套接字 。)
流式套接字提供沒有記錄邊界的數據流:可以是雙向的字節流(應用程序是全雙工:可以通過套接字同時傳輸和接收)。可依賴流傳遞有序的、不重復的數據。(“有序”指數據包按發送順序送達。“不重復”指一個特定的數據包只能獲取一次。)這能確保收到流消息,而流非常適合處理大量數據。
網絡傳輸層可將數據拆分為或分組為若干個大小適當的數據包。 CSocket 類將為您處理打包和解包。
流基於顯式連接:套接字 A 請求與套接字 B 建立連接;套接字 B 接受或拒絕此連接請求。
打電話的情況與流非常相似:正常情況下,接聽方聽到您的話和您講話時的順序一樣,沒有重復和遺漏。流套接字適合文件傳輸協議 (FTP) 這類實現,此協議有利於傳輸任意大小的 ASCII 或二進制文件。
如果必須保證數據送達而且數據大小很大時,流式套接字優於數據文報套接字。有關流式套接字的更多信息,請參見 Windows Sockets 規范。該規范可在 Platform SDK 中獲得。
MFC 示例 CHATTER 和 CHATSRVR 都使用流式套接字。這些示例可能已經設計為使用數據文報套接字向網絡上的所有接收套接字廣播。而目前的設計更好,這是因為:
注意: 如果使用 CSocket 類,則必須使用流。如果將套接字類型指定為 SOCK_DGRAM ,則 MFC 斷言失敗。