c - 套接字编程 : recv()

标签 c sockets

我有一个应用程序,其中各种实体通过套接字相互通信,我使用的是 C 编程语言。当一个实体向另一个实体发送一条长消息时,recv() 函数可能会分段读取这条消息。因此,我必须通过附加所有接收到的部分来在接收方重新构建消息。

我的问题是与 recv() 相关的一般套接字编程问题。 recv() 如何知道消息何时被完全阅读?我应该用“\n”这样的特殊字符终止消息吗?或者我应该将邮件的大小作为标题发送吗?通常的做法是什么?

最佳答案

正如您所注意到的,对于流套接字,没有内置的消息边界概念。您需要在应用程序级协议(protocol)中构建某种确定消息结束的方法。

您建议的两个选项都很常见:长度前缀(每条消息以消息的长度开头)或消息结束定界符(可能只是基于文本的协议(protocol)中的换行符) , 例如)。第三种较少使用的选项是为每条消息规定固定大小。这些选项的组合也是可能的 - 例如,包含长度值的固定大小的 header 。

关于c - 套接字编程 : recv(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19627307/

相关文章:

c - free 和返回指针的正确用法是什么?

c - 在基于 C 的语言中,EOF 是如何生成和解释的?

windows - 在 Windows 上使用套接字

objective-c - AsyncSocket:如何定义读取长度并仅在达到读取长度时获得回调

c - 如何在 C 中将 int 转换为 float?

C 和 OpenMP : pointer to shared read-only data slows down execution

C语言错误输出...使用二维数组的pascal三角形

python - 如何在不使用多线程的情况下绑定(bind)多个IP?

ruby - 在 Ruby 中构建一个其他进程可以与之交互的 linux 服务,也许是通过套接字?

python - 是什么导致 Python 套接字错误?