1

我的客户代码是这样的:

   socket = new Socket("10.105.1.20", 5678);
   DataOutputStrean dos = new DataOutputStream(socket.getOutputStream());
   short len = 4;
   dos.writeByte(len);
   dos.writeByte(len >> 8);
   dos.writeShort(0x0410);
   dos.flush();

它应该是4字节发送到服务器。但是当我使用wireshark获取数据包时,数据是3字节

   00 04 10

我认为应该是

   04 00 04 10

第一个字节 04 在哪里?我的代码中是否有问题,或者它与wireshark.THX有关,以获得您的帮助!

4

2 回答 2

4

没有什么可以保证所有四个写入都将在同一个数据包中发送。可能第一个字节是自己发送的,然后接下来的三个由 Nagle 算法合并。当您希望发送写入时,您可以使用 BufferedOutputStream 并刷新它,但仍然不能保证。TCP 可以按照它喜欢的任何方式对您的数据进行分段。

于 2013-11-05T12:07:04.353 回答
-1

短原始数据类型在 Java 中是 16 位的。

这个SO 答案显示了如何将短转换为字节 [],这可能是您正在寻找的。

此外,这个SO question有更多关于字节排序的信息。

于 2013-11-05T11:47:04.157 回答