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