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