使用wireshark获取数据包的Java套接字

时间:2013-11-05 09:25:19

标签: java sockets wireshark outputstream

我的客户端代码如下:

   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有关,为您提供帮助!

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:-1)

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

这个SO answer显示了如何将短片转换为字节[],这可能就是你要找的东西。

此外,SO question提供了有关字节排序的更多信息。