我正在使用c ++开发TCP客户端服务器应用程序。现在允许在这个项目中使用第三方库。
此处客户端服务器之间的交换使用良好定义的协议格式。客户端接收它将发送它用于解析的数据包。我有协议管理器,它将负责解析活动。
我有疑问
当数据从网络到达客户端时,
OS缓冲它直到应用程序调用recv()函数。
因此,两个消息msg1和msg2到达缓冲区,对recv的调用将返回msg1 + msg2。 现在这可能导致解析活动失败。
我的疑问
1.上述假设是否正确?
2.如果上述提议是正确的,那么如何解决这个问题。
答案 0 :(得分:0)
TCP模拟流,因此在TCP中没有消息的概念。如果你想要消息,你的应用程序必须有一些协议来分隔它们。
UDP确实有消息,因此可以检索单独的消息。
答案 1 :(得分:0)
您可以为信息使用LV协议(长度值)。 在第一个(1-4)字节中编码消息长度,然后放入消息。 例如:14“Hello world \ 0”
在你的服务器中,当客户端发送一些东西时你必须recv()第一个(1-4)字节,然后recv()消息的长度。