Tengo entendido que es a la inversa:
Es el AVL quien envía un ACK/LOAD/KEEPALIVE y espera una respuesta por parte de el servidor , caso contrario reinicia el socket y establece una nueva conexión.
Nunca vi un socket TCP que el keep-alive sea iniciado por el servidor, se puede, pero estaría violando el protocolo TCP/IP.
Normalmente el ACK es iniciado por el cliente.
la respuesta a un ACK la gestiona TrackClientPacketHandler.java en su Workhorse:
/* TK103-2: keep-alive packet? */
if (s.startsWith("##")) {
// TK103-2: keep-alive packet?
// ##,imei:123451042191239,A;
Print.logInfo("TK103-2 Header: " + s); // debug message
return "LOAD".getBytes(); // ACK "Load"
} else
...
..
.
los keep-alive en un tk103-2 comienzan con "##" y espera "LOAD" como respuesta.
Una ves recibido el "LOAD" envían el Evento.
En muchos AVL el ACK ocurre en la capa OSI #5 (capa de sesión) y es gestionado directamente por
java.net a nivel Socket sin intervención alguna de GTS. es un "
administrative packet" sin contenido ni data.