我有一个应用程序,其中各种实体通过套接字相互通信,我使用的是 C 编程语言。当一个实体向另一个实体发送一条长消息时,recv() 函数可能会分段读取这条消息。因此,我必须通过附加所有接收到的部分来在接收方重新构建消息。
我的问题是与 recv() 相关的一般套接字编程问题。 recv() 如何知道消息何时被完全阅读?我应该用“\n”这样的特殊字符终止消息吗?或者我应该将邮件的大小作为标题发送吗?通常的做法是什么?
最佳答案
正如您所注意到的,对于流套接字,没有内置的消息边界概念。您需要在应用程序级协议(protocol)中构建某种确定消息结束的方法。
您建议的两个选项都很常见:长度前缀(每条消息以消息的长度开头)或消息结束定界符(可能只是基于文本的协议(protocol)中的换行符) , 例如)。第三种较少使用的选项是为每条消息规定固定大小。这些选项的组合也是可能的 - 例如,包含长度值的固定大小的 header 。
关于c - 套接字编程 : recv(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19627307/