簡體   English   中英

如何讀取Java中的網絡stream數據(協議包)

[英]How to read network stream data in Java (Protocol packets)

正在解碼某個 gps 設備用於通信的協議。 現在,正在分析它發送的第一個數據包。 我能夠閱讀它,但我認為我沒有正確閱讀它。

這是我到目前為止得到的:

    public static String toHex(byte[] bytes) {
    BigInteger bi = new BigInteger(1, bytes);
    return String.format("%0" + (bytes.length << 1) + "X", bi);
}

private void ProcessInitialPacket(){
            int port = 1954;
    System.out.println("Listening on port :"+port);
    byte[] data =  new byte[17];
    byte[] ackPacket = new byte[2];
    byte[] dataPacket= new byte[15];
    try {
        ServerSocket sSocket = new ServerSocket(port);
        Socket cSocket = sSocket.accept();          
        DataInputStream dataIN = new DataInputStream(cSocket.getInputStream());
        int packetSize=dataIN.read(data,0,data.length);         
        System.arraycopy(data, 0, ackPacket, 0, 2);
        System.arraycopy(data,2,dataPacket,0,15);

        System.out.println("Total packet size: "+ packetSize);
        System.out.println("ACK PACKET : "+ toHex(ackPacket));
        System.out.println("DATA PACKET: "+ toHex(dataPacket));
        System.out.println("FULL PACKET: "+ toHex(data));
    } catch (IOException e) { 
        e.printStackTrace();
    }
}

output:

-PARSER()--

-INITSESSION-- 監聽端口:1954

總包大小:17

確認包:000F

數據包:333532383438303236323631393534

全包:000F333532383438303236323631393534

------閉幕------------

現在,我的問題:

這里發生的是設備發送 [0x00][0x0F]xxxxxxxxxxxxxxx ,其中 xxxxxxx 是它的imei(數據包)。 我的問題是數據包上的 3 太多了,所以真正有效的 output 是

352848026261954

您可以通過刪除 3's 獲得。 我的問題是:這種行為是否來自我的代碼或其協議的一部分? 我可以以編程方式更正此問題,但我想知道代碼是否有辦法導致這些額外的 3 秒。

您正在查看需要解碼為數字的 ascii 值的十六進制。 字符 '0' 作為十進制是 48 或十六進制 0x30,直到 '9' 是 57 作為十進制或 0x39 作為十六進制。

所以一個字節序列

33 35 32 38 34 38 30 32 36 32 36 31 39 35 34

"352848026261954"

作為 ASCII 字符。

我會像這樣更改您的代碼

dataIN.readFully(data); // always read 17 bytes, not less
String text = new String(data, 0, 2, 13); // decodes 8-bit bytes as a String
long number = Long.parseLong(text);

這是 ASCII 數字編碼。 0 被傳輸為“0”,即 0x30。 1 作為 0x31 傳輸。 等等所以你對數據格式的理解是不正確的。

暫無
暫無

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

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