【发布时间】:2010-10-23 14:03:46
【问题描述】:
“流式”套接字和“数据报”套接字类型有什么区别?
【问题讨论】:
标签: sockets
“流式”套接字和“数据报”套接字类型有什么区别?
【问题讨论】:
标签: sockets
简短的回答:消息边界和连接。
使用流套接字,您可以编写两条 5 字节的消息并最终读取一条 10 字节的消息。这是因为您写入的数据只是被放入单个流中,写入的数据之间没有界限。这就像一次将一个单词写入文件一样。作为文件的阅读者,您如何知道作者最初是一次一个字符,一次一个词,一次一句话,一次一段,还是一次写整个文件? ?基本上,如果文件已经被写入,你不会。使用流,如果发送是快速连续完成的,您如何知道源发送了两个 5 字节消息或一个 10 字节消息?您必须有某种长度或分隔符来帮助指示消息边界。有时您不关心消息或其边界。其他时候,您添加应用程序级别的数据(例如,标题、分隔符、预定义的消息长度等......)。这使得流套接字也可用,因为您自己处理消息传递(即在应用程序层)。
使用基于数据报的套接字,接收者知道发送者发送的消息的大小,因为它们是 1:1 传递的(承担损失、重复等),并保持其原始大小。
除此之外,基于流的套接字往往是面向连接和 1:1 的,而数据报套接字是无连接的,并且可能是一对多(源)对多(接收者),具有广播/多播。
【讨论】: