“流式”套接字和“数据报”套接字类型有什么区别?

3
“流式”套接字和“数据报”套接字有什么区别?
“流式”套接字提供了一种可靠的、面向连接的服务,它们使用TCP协议进行通信。这意味着发送方和接收方之间建立了一个持久的连接,并且保证数据按照发送顺序到达。另一方面,“数据报”套接字则提供了一种不可靠的、无连接的服务,它们使用UDP协议进行通信。这意味着数据包可以按任何顺序到达,也可能会丢失或重复。选择哪种套接字类型取决于应用程序的需求和特性。
1个回答

7
简短回答:消息边界和连接。
使用流套接字,您可以写入两个五字节的消息,但最终读取的是一个十个字节的消息。这是因为您写入的数据只会被放置在单个流中,没有明确的数据边界。这就像逐个单词向文件写入内容。作为文件的读者,您如何知道写入者最初是逐个字符、单词、句子、段落还是一次性写整个文件的?基本上,如果文件已经写好了,您是不知道的。对于流来说,如果发送过程是连续完成的,则如何知道源发送了两个长度为五个字节的消息还是一个长度为十个字节的消息?您必须有某种长度或分隔符来帮助指示消息边界。有时您不关心消息或它们的边界。其他时候,您将添加应用程序级数据(例如标题、分隔符、预定义的消息长度等)。这使得流套接字也可用,因为您自己处理消息(即在应用程序层)。
使用基于数据报的套接字,接收方知道发件人发送的消息大小,因为它们以1:1(除了丢失、重复等)的方式传递,保留其原始大小。
除了所有这些,基于流的套接字往往是面向连接的和1:1的,而数据报套接字是无连接的且潜在地是一对多的(源发送到许多接收者),具有广播/组播功能。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接