使用wireshark获取数据包的Java套接字
Posted
技术标签:
【中文标题】使用wireshark获取数据包的Java套接字【英文标题】:Java socket using wireshark fetch packets 【发布时间】:2013-11-05 09:25:18 【问题描述】:我的客户端代码是这样的:
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有关,请您帮忙!
【问题讨论】:
【参考方案1】:没有什么可以保证所有四个写入都将在同一个数据包中发送。可能第一个字节是自己发送的,然后接下来的三个由 Nagle 算法合并。当您希望发送写入时,您可以使用 BufferedOutputStream 并刷新它,但仍然不能保证。 TCP 可以按照自己喜欢的方式对数据进行分段。
【讨论】:
是的,我在 prev 数据包中找到了第一个字节。在我的客户端和服务器中发送的每条消息都将分为 2 段(1 字节 + 下一个字节)【参考方案2】:短原始数据类型在 Java 中是 16 位。
这个SO answer 展示了如何将一个short 转换为一个byte[],这可能是您正在寻找的。p>
此外,此SO question 包含有关字节顺序的更多信息。
【讨论】:
不解释观察结果。以上是关于使用wireshark获取数据包的Java套接字的主要内容,如果未能解决你的问题,请参考以下文章