【问题标题】:What's the difference between a "stream-type" socket and a "datagram" socket type?“流式”套接字和“数据报”套接字类型有什么区别?
【发布时间】:2010-10-23 14:03:46
【问题描述】:

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

【问题讨论】:

    标签: sockets


    【解决方案1】:

    简短的回答:消息边界和连接。

    使用流套接字,您可以编写两条 5 字节的消息并最终读取一条 10 字节的消息。这是因为您写入的数据只是被放入单个流中,写入的数据之间没有界限。这就像一次将一个单词写入文件一样。作为文件的阅读者,您如何知道作者最初是一次一个字符,一次一个词,一次一句话,一次一段,还是一次写整个文件? ?基本上,如果文件已经被写入,你不会。使用流,如果发送是快速连续完成的,您如何知道源发送了两个 5 字节消息或一个 10 字节消息?您必须有某种长度或分隔符来帮助指示消息边界。有时您不关心消息或其边界。其他时候,您添加应用程序级别的数据(例如,标题、分隔符、预定义的消息长度等......)。这使得流套接字也可用,因为您自己处理消息传递(即在应用程序层)。

    使用基于数据报的套接字,接收者知道发送者发送的消息的大小,因为它们是 1:1 传递的(承担损失、重复等),并保持其原始大小。

    除此之外,基于流的套接字往往是面向连接和 1:1 的,而数据报套接字是无连接的,并且可能是一对多(源)对多(接收者),具有广播/多播。

    【讨论】:

      猜你喜欢
      • 2010-12-28
      • 1970-01-01
      • 1970-01-01
      • 2013-09-05
      • 2018-05-09
      • 2016-03-08
      • 2017-07-30
      • 2015-10-20
      相关资源
      最近更新 更多