Я работаю над декодированием протокола, используемого определенным устройством 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
------ CLOSESESSION ------------
Теперь моя проблема:
здесь происходит то, что устройство отправляет [0x00] [0x0F] xxxxxxxxxxxxxxx
где xxxxxxx - это его imei (пакет данных).
Моя проблема в том, что в пакете данных слишком много 3-х, поэтому реальный действительный результат -
352848026261954
, который вы получите, удалив 3. мой вопрос: может ли это поведение происходить из моего кода или его части протокола? я могу исправить это программно, но я хочу знать, что есть способ, которым код может вызвать эти дополнительные 3.