[英]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.