recv socket api的内部工作

时间:2011-04-26 09:31:40

标签: c++ tcp network-programming

我正在使用c ++开发TCP客户端服务器应用程序。现在允许在这个项目中使用第三方库。

此处客户端服务器之间的交换使用良好定义的协议格式。客户端接收它将发送它用于解析的数据包。我有协议管理器,它将负责解析活动。

我有疑问
当数据从网络到达客户端时, OS缓冲它直到应用程序调用recv()函数。

因此,两个消息msg1和msg2到达缓冲区,对recv的调用将返回msg1 + msg2。 现在这可能导致解析活动失败。

我的疑问
1.上述假设是否正确? 2.如果上述提议是正确的,那么如何解决这个问题。

2 个答案:

答案 0 :(得分:0)

TCP模拟流,因此在TCP中没有消息的概念。如果你想要消息,你的应用程序必须有一些协议来分隔它们。

UDP确实有消息,因此可以检索单独的消息。

答案 1 :(得分:0)

您可以为信息使用LV协议(长度值)。 在第一个(1-4)字节中编码消息长度,然后放入消息。 例如:14“Hello world \ 0”

在你的服务器中,当客户端发送一些东西时你必须recv()第一个(1-4)字节,然后recv()消息的长度。