正在解码某个 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
确认包:000F
数据包:333532383438303236323631393534
全包:000F333532383438303236323631393534
------闭幕------------
现在,我的问题:
这里发生的是设备发送 [0x00][0x0F]xxxxxxxxxxxxxxx ,其中 xxxxxxx 是它的imei(数据包)。我的问题是数据包上的 3 太多了,所以真正有效的输出是
352848026261954
您可以通过删除 3's 获得。我的问题是:这种行为是否来自我的代码或其协议的一部分?我可以以编程方式更正此问题,但我想知道代码是否有办法导致这些额外的 3 秒。