Java如何解析UDP数据包中的原始数据

我有来自UDP连接的假设数据,它是二进制forms。

它由5个字段组成,大小为25位

他们的补偿如下

1. 0-4 ID 2. 5-10 payload 3. 11-12 status 4. 13-23 location 5. 23-25 checksum 

我如何阅读这些数据?

  DatagramSocket serverSocket = new DatagramSocket(18000); byte[] receiveData = new byte[1024]; while (true) { DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); serverSocket.receive(receivePacket); //not sure how I should be reading the raw binary data back in } 

我该如何存储这些数据?

DatagramPacket的getData以byte []的forms返回有效负载。 你可以使用Arrays.copyOfRange来获取各个字段(我假设你的意思是你的问题中的字节 ,而不是 ):

 while (true) { DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); serverSocket.receive(receivePacket); // get the entire content byte telegramContent[] = receivePacket.getData(); // and slice it up: byte ID[] = Arrays.copyOfRange(telegramContent,0,5); byte payload[] = Arrays.copyOfRange(telegramContent,6,11); // and so on. } 

在此步骤之后,您将字段作为单个字节数组,可能需要对其他类型进行一些后处理/重组。 在此步骤中,最烦人的事情是所有Java的类型都已签名,而在许多通信协议中使用了无符号实体,因此在此步骤中要小心。

您的问题中没有提到,但您可能稍后需要它:汇编消息进行传输。 我喜欢使用GNU Trove的TByteArrayList来完成该任务,因为你不需要担心在开始之前保留一个具有正确长度的byte [],只需复制字节或消息段,一旦你完成调用toArray和voilà,你的byte []已准备好传输。