DataInput:TCP上丢失的字节

时间:2015-05-07 23:41:49

标签: java sockets tcp datainputstream

我通过

发送数据
data.writeInt()

其中Data是DataOutput,它有一个socket的输出流。

另一方面,我有一个socket的InputStream和一个DataInput,我读了

data.readInt()

我已确认每次写入都与适当的读取匹配。然后我用wireshark来查看包裹,每一个都应该在那里。

然而,当我发送一个17时,我得到了1114112.这被移动了2个字节,所以我可能在某处丢失两个字节吗?

我做了一些添加flush()的实验,但问题仍然存在。此外,我还没有设法写一个更小的例子来显示问题(这就是为什么我不在这里包含代码)。然而,大的例子是稳定的,它每次都发生在同一个地方。

对于不同的数据,我在17之后得到285212672(应该是0)。这看起来像17的最后一个字节被读取两次。

任何想法可能是什么或建议如何调试这个?

亚历

1 个答案:

答案 0 :(得分:1)

  

我已确认每次写入都与相应的读取匹配。

显然情况并非如此。重新检查。显然,您与发件人不同步。例如,您可能正在使用read()使用readFully()

NB TCP不会丢失数据。

  

这被移动了2个字节,所以我可能在某处松开两个字节吗?

可以肯定的是:'某处'在你的代码中。

  

我做了一些添加flush(),的实验,但问题仍然存在。

只是期待。没有理由flush()应该有所作为。

  

此外,我还没有设法编写一个显示问题的小例子(这就是为什么我不在这里包含代码)。然而,大的例子是稳定的,它每次都发生在同一个地方。

这只是预期。您有应用程序协议错误。