【发布时间】:2011-04-26 09:31:40
【问题描述】:
我正在使用 c++ 开发 TCP 客户端服务器应用程序。此项目中现在允许使用第三方库。
这里客户端服务器之间的交换使用良好定义的协议格式。一旦客户端收到数据包,它将发送它进行解析。我有协议管理器来处理解析活动。
我有以下疑问
当数据从网络到达客户端时,
操作系统会缓冲它,直到应用程序调用 recv() 函数。
所以两条消息 msg1 和 msg2 到达缓冲区,调用 recv 将返回 msg1+msg2。 现在这可能会导致解析活动失败。
我的查询
1. 上述假设是否正确?
2. 如果上述假设是正确的,那么如何解决这个问题。
【问题讨论】:
-
看看this的问题,它讨论了你应该如何通过TCP处理来自服务器的消息。
-
感谢 cpx 我认为它应该可以工作
-
你是对的:
recv可能会完整返回两条消息。在其他情况下,recv可能只返回消息的一部分,或者它可能返回所有 msg1 和部分 msg2。简而言之,recv不知道也不尊重生成数据流的send调用序列。 TCP 将保证的是:它返回的所有字节都是有序的,没有任何跳过。 (注意,其他规则适用于 UDP 或其他协议。)
标签: c++ tcp network-programming