簡體   English   中英

Java如何解析UDP數據包中的原始數據

[英]Java How to parse raw data from a UDP packet

我有來自UDP連接的假設數據,它是二進制形式。

它由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 []的形式返回有效負載。 你可以使用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 []已准備好傳輸。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM