最近,我在阅读 Socket编程指南 时,注意到了以下部分:
但是,如果您计划重用套接字进行更多的传输,请注意套接字上没有“EOT”(传输结束)。 我再说一遍:如果套接字 send 或 recv 处理 0 字节后返回,则连接已断开。 如果连接未被断开,则可能会永远等待 recv,因为套接字不会告诉您没有更多内容可读取(暂时)。 如果您仔细考虑一下,就会意识到 socket 的一个基本真理:消息必须是 固定长度(不好看),或者 有定界符(耸肩),或者 指示其长度(更好),或者 通过关闭连接来结束。 这个选择完全取决于您,(但某些方法比其他方法更正确)。
这部分突出了 socket “协议”可能编写传递消息的4种可能性。我的问题是,对于实际应用程序来说,哪种是首选方法?
通常最好在每条消息中包含消息大小(可能在标头中),正如文章所断言的那样吗?是否有任何情况下另一种方法更可取?