java - 如何设置udp数据包的格式?

标签 java udp packet datagram

在一项作业中,需要通过将两台笔记本电脑中的无线 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/

相关文章:

java - Object matrix = Array - Oracle网站实例上数组反射教程有什么问题

java - 即使没有在 return 语句中指定任何返回值,也会向调用者返回 true 值

java - 使用 Java 套接字读取 IP 层 header

java - Arduino 和 Android UDP 数据报

c++ - 排列数据包中的字节

java - 使用 set 子句中的子选择更新 Hibernate HQL

java - 我可以在 Java 中使用双键映射吗

java - UDP发送和接收

java - 数据包损坏和 UDP

多个数据包上的 HTTP 数据 block ?