我正在尝试解析我将在套接字上收到的 DatagramPacket。我知道我将收到的数据包的格式,即 DHCPREQUEST 数据包,但我认为这并不重要。为了简单起见,我们只考虑前六个字段:
第一个字段是“操作码”,为 1 个字节。
第二个字段是“硬件类型”,为 1 字节。
三、“硬件地址长度”,1字节。
第四,“跳数”,1字节。
五、“交易标识符xid”,4字节。
第六,“秒”,2字节。
收到数据包后,我的方法是将其转换为字节数组。
DatagramPacket request = new DatagramPacket(new byte[1024], 1024);
socket.receive(request);
byte[] buf = request.getData();
此时,数据包已存储在字节数组中buf
作为一系列字节。既然我知道这个字节序列的结构是什么,那么我该如何解析它呢?一字节字段很简单,但是多位字段呢?例如,如何提取字节 4 到 7,并将它们存储在名为xid
?
我可以手动将每个字节放入数组中:
byte[] xid = new byte[4];
xid[0] = buf[4];
xid[1] = buf[5];
xid[2] = buf[6];
xid[3] = buf[7];
但这对于长度为数百字节的字段来说非常乏味且不切实际。 String 类可以解析给定偏移量和长度的子字符串; Java中字节数组有类似的方法吗?
或者我是否以某种方式让自己的事情变得困难?
将字节数组包装在 ByteArrayOutputStream 中;围绕它包装一个 DataInputStream ;然后使用DataInputStream的方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)