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

时间:2011-01-19 23:03:25

标签: java udp packet datagram

在作业中,需要通过将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)   

我知道在reciver端你可以使用packet.getAddress()获取发送数据包的地址;并且接收方的地址已经知道,但我不明白这种格式的目的或如何设置数据包的格式。我只想知道udp数据包的实际格式是什么,以及如何在java中设置udp数据包的格式。如何通过指定缓冲区字节数组创建dataGram数据包,intelAddress和端口设置数据包的格式?我是否需要将缓冲区字节数组修改为与上述格式相同(尽管发送方的地址仍然是发送的)?请尽快回复我。任何帮助将不胜感激。提前致谢。

1 个答案:

答案 0 :(得分:1)

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

您可以控制的只是数据包的数据部分。这可以按照您喜欢的方式进行格式化。听起来你需要按照上面的说明对其进行格式化。该格式的值可能是有争议的(源,目标地址),但听起来你必须遵守它。

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

编辑:抱歉,用8替换了4字节标题。我的不好。您认为我现在可以阅读协议规范。