0

在一项任务中,需要通过将 2 台笔记本电脑中的无线 LAN 卡切换到 ad hoc 模式,然后选择合适的 SSID,在 2 台笔记本电脑之间形成一个 ad hoc 网络。我在labtops 之间创建了一个adhock 网络。然后需要开发一个“Sender”和一个“Receiver”应用程序,从一台笔记本电脑发送一个简单的“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 和端口来创建 dataGram 数据包来设置数据包的格式?我是否需要将缓冲区字节数组修改为与上述相同的格式(尽管发送方的地址无论如何都会发送)?请尽快回复我。任何帮助将不胜感激。提前致谢。

4

1 回答 1

1

UDP 数据包具有隐含的格式。http://en.wikipedia.org/wiki/User_Datagram_Protocol Java 将处理必须存在的 8 个标头字节(源端口、目标端口、长度、校验和)。即使您只提供一个字节的数据,Java 仍然会正确创建 8 字节的标头。您不负责形成这些标头,只负责提供其中的值。

您可以控制的只是数据包的数据部分。可以按照您喜欢的任何方式进行格式化。听起来您需要像上面显示的那样对其进行格式化。该格式的价值可能存在争议(源地址、目标地址),但听起来您无论如何都必须遵守它。

是的,您必须将缓冲区字节数组修改为与您提供的格式相同的格式。其他值(IP 地址和端口)用于形成报头,或实际在线发送数据包。

编辑:对不起,用 8 替换了 4 字节标题。我的错。你会认为我现在可以阅读协议规范。

于 2011-01-19T23:40:09.803 回答