本文介绍流套接字,这是可用的两种 Windows 套接字类型之一。 (另一种类型是 数据报套接字。
流套接字提供没有记录边界的数据流:可以双向的字节流(应用程序是全双工:它可以通过套接字传输和接收)。 可以依赖流来传送已排序的、未删除的数据。 (“Sequenced”表示数据包按发送的顺序传递。“取消删除”表示仅获得特定数据包一次。可以保证接收流消息,流非常适合处理大量数据。
网络传输层可能会将数据分解或分组为大小合理的数据包。 该 CSocket
类将为你处理打包和解压缩。
流基于显式连接:套接字 A 请求与套接字 B 的连接;套接字 B 接受或拒绝连接请求。
电话呼叫为流提供了良好的类比。 在正常情况下,接收方按你说的顺序听到你说的话,而不会重复或丢失。 例如,流套接字适用于文件传输协议(FTP)等实现,这有助于传输任意大小的 ASCII 或二进制文件。
当数据必须保证到达时以及数据大小较大时,流套接字最好是数据报套接字。 有关流套接字的详细信息,请参阅 Windows 套接字规范。 该规范在 Windows SDK 中可用。
使用流套接字可以优于设计为使用数据报套接字广播到网络上所有接收套接字的应用程序,因为
广播模型受网络洪水(或“风暴”)问题的约束。
随后采用的客户端-服务器模型更高效。
流模型提供可靠的数据传输,其中数据报模型没有提供。
最终模型利用 Unicode 和 ANSI 套接字应用程序之间的通信能力,该应用程序类 CArchive 适用于 CSocket 类。
注释
如果使用类
CSocket
,则必须使用流。 如果将套接字类型指定为SOCK_DGRAM,MFC 断言将失败。