0

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

|尺寸|类型|数据| 尺寸|类型|部分数据|尺寸|类型|数据

这将导致我从 3. 消息中读取字节到 2. 这会发生吗?如何检测这种情况?

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

4

2 回答 2

1

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

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

于 2013-10-18T11:13:31.690 回答
0
  1. 您可以在调试代码时将一些控制数据添加到您的消息结构中(例如,根据您的数据计算的 CRC16/32 或 MD5),并在收到的消息中检查它以检测错误。

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

于 2013-10-21T17:31:22.190 回答