【问题标题】:How to set the format of a udp packet?如何设置 udp 数据包的格式?
【发布时间】:2011-06-12 03:02:11
【问题描述】:

在一项任务中,需要将 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 数据包来设置数据包的格式?我是否需要将缓冲区字节数组修改为与上述相同的格式(尽管发送方的地址无论如何都会发送)?请尽快回复我。任何帮助将不胜感激。提前致谢。

【问题讨论】:

    标签: java udp packet datagram


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-12
      • 2018-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多