特定の 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();
}
}
出力:
-PARSER()--
-INITSESSION-- ポート :1954 でリッスン中
合計パケット サイズ: 17
ACK パケット : 000F
データパケット: 333532383438303236323631393534
完全なパケット: 000F333532383438303236323631393534
------閉会式------------
今、私の問題:
ここで起こっていることは、デバイスが [0x00][0x0F]xxxxxxxxxxxxxxx を送信することです。xxxxxxxx はその imi (データ パケット) です。私の問題は、データ パケットに 3 が多すぎるため、実際の有効な出力は次のようになることです。
352848026261954
これは、3 を削除することによって得られます。私の質問は、この動作は私のコードまたはプロトコルの一部に由来するのでしょうか? 私はこれをプログラムで修正できますが、コードがこれらの余分な 3 を引き起こす方法があることを知りたいです。