最近,在阅读Socket Programming HOWTO时,以下部分跳了出来:
但是,如果您计划重新使用套接字进行进一步传输,则需要意识到套接字上没有"EOT"(传输结束).我再说一遍:如果在处理0字节后套接字send或recv返回,则连接已断开.如果连接没有被破坏,你可以永远等待一个recv,因为套接字不会告诉你没有什么可读的(现在).现在,如果你仔细考虑一下,你就会发现套接字的一个基本事实:消息必须是固定长度(yuck),或者是分隔(耸肩),或者指示它们有多长(更好),或者通过关闭连接来结束.选择完全属于你,(但有些方式比其他方式更严格).
本节重点介绍了如何编写套接字"协议"以传递消息的4种可能性.我的问题是,用于实际应用的首选方法是什么?
通常最好在每条消息中包含消息大小(可能在标题中),因为文章或多或少断言?有没有其他方法更可取的情况?
公共协议要么在标头中指定长度,要么分隔(例如HTTP).
请记住,这还取决于您是使用TCP还是UDP套接字.由于TCP套接字是可靠的,因此您可以确保将所有内容都插入其中.使用UDP,故事是不同的,也是更复杂的.