客户端是否有可能在另一条消息之后收到一半消息?

时间:2013-10-18 11:06:36

标签: tcp buffer protocols

如果我的TCP上的消息协议看起来像“| SIZE | TYPE | DATA”,那么我的读取缓冲区(实际上是我的数据流)看起来像这样(由于错误):

| SIZE | TYPE | DATA | SIZE | TYPE | PARTIAL DATA | SIZE | TYPE | DATA

这会导致我将3. message中的字节读入2.这是否会发生以及如何检测这种情况?

编辑:对于“部分数据”,我的意思是该消息的其余部分丢失,永远不会收到。在该消息之后发送另一条完整的消息,它找到接收方的路。但是,由于我的2.消息未满,我将在3.消息中读取3.消息的一部分。 :(

2 个答案:

答案 0 :(得分:1)

是的,您可能无法阅读整条消息。 TCP中没有消息,它只是一个字节流。 recv()方法告诉你它收到了多少字节。

重新编辑,TCP中没有任何遗失。

答案 1 :(得分:0)

  1. 您可以在调试代码时(例如,根据数据计算CRC16 / 32或MD5)向您的消息结构添加一些控制数据,并在收到的消息中检查它以检测错误。

  2. 您可以使用Wireshark或tcpdump存储您的流量转储。在转储中,您将看到数据流。如果流中的数据没有错误但是您收到“部分”消息,则错误在接收代码中,否则它在发送代码中。