“流式”套接字和“数据报”套接字类型有什么区别?
答案 0 :(得分:7)
简短回答:消息边界和连接。
使用流套接字,您可以编写两个五字节消息,并最终读取一个十字节消息。这是因为您编写的数据只是放在一个数据流中,数据之间没有边界。这就像一次写一个单词到文件。作为该文件的读者,您如何知道作者最初是一次写入一个字符,一次一个字,一次一个句子,一次一个段落,或者一次写入整个文件?基本上,如果文件已经写好,你就不会。使用流,如果快速连续发送,您如何知道源发送了两个五字节消息或一个十字节消息?您必须有某种长度或分隔符来帮助指示消息边界。有时你不关心消息或它们的界限。其他时候,您添加应用程序级别数据(例如,标题,分隔符,预定义的消息长度等)。这使得流套接字也可以使用,因为您自己处理消息(即,在应用程序层)。
使用基于数据报的套接字,接收方知道发送方发送的消息的大小,因为它们以1:1(baring loss,dups等等)交付,保留其原始大小。
除了所有这些之外,基于流的套接字往往是面向连接的,1:1,而数据报套接字是无连接的,可能是一个(源)到多个(接收者),具有广播/多播。