在一项作业中,需要通过将两台笔记本电脑中的无线 LAN 卡切换到 ad hoc 模式,然后选择合适的 SSID,在 2 台笔记本电脑之间形成 ad hoc 网络。 我在实验室之间创建了一个临时网络。然后需要开发一个“发送方”和“接收方”应用程序,以从一台笔记本电脑发送一条简单的“Hello World”消息,并使用套接字在另一台笔记本电脑上接收它。我使用 udp 数据报套接字和 udp 数据包成功完成了这一任务(在 java 中),因为 adhoc 网络中没有服务器。唯一的问题是,数据包格式应如下所示,其中数据表示为最大长度 = 64 KB 的字节数组(假设提供了 IP 地址)以 2 个字节为单位):
| | | | | | | | | | | |H|E|L|L|O| |W|O|R|L|D|
__________|___________|
Sender ID |Reciever ID| data
(4 bytes) (4 bytes)
我知道在接收方你可以使用 packet.getAddress() 获取发送数据包的地址;接收方的地址已经知道,但我不明白这种格式的目的或如何设置数据包的格式。我只是想知道udp数据包的实际格式是什么以及如何在java中设置udp数据包的格式。如何通过指定缓冲区字节数组、intelAddress 和端口来创建数据报数据包并设置数据包的格式?我是否需要将缓冲区字节数组修改为与上述相同的格式(尽管无论如何都会发送发送者的地址)?请尽快回复我。任何帮助将不胜感激。提前致谢。
最佳答案
UDP 数据包具有隐式格式。 http://en.wikipedia.org/wiki/User_Datagram_Protocol Java 将处理必须存在的 8 个 header 字节(源端口、目标端口、长度、校验和)。即使您只提供一个字节的数据,Java 仍然会正确创建 8 字节的 header 。您不负责形成这些 header ,只负责提供其中的值。
您所能控制的只是数据包的数据部分。可以按照您喜欢的任何方式格式化。听起来您需要将其格式化,如上面所示。该格式的值可能是有争议的(源地址、目标地址),但听起来无论如何您都必须遵守它。
是的,您必须将缓冲区字节数组修改为与您提供的格式相同。其他值(IP 地址和端口)用于形成 header ,或实际在线路上发送数据包。
编辑:抱歉,用 8 字节替换了 4 字节 header 。我的错。你可能认为我现在可以阅读协议(protocol)规范了。
关于java - 如何设置udp数据包的格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4741828/