Cita:
Iniciado por chuidiang Hola:
Cuando algo (el GPS en este caso), envía mensajes, los envía de forma que en recepción puedan separarse e interpretarse. Hay muchas formas de hacer esto y tendrías que ven el manual de tu GPS cual está usando.
Si los mensajes son caracteres de texto ascii, una forma válida es enviar un retorno de carro al final del mensaje. Pero parece que no es el caso.
Si los mensajes no son caracteres de texto ascii, sino bytes cualesquiera, lo habitual es que delante de cada mensaje de envíe una pequeña cabecera (un conjunto de bytes) que sirven para indicarte como leer el resto del mensaje. En tu caso, parece que parte de esa cabecera es la longitud del mensaje. También suele ser habitual que la cabecera contenga algún tipo de byte fijo (por ejemplo, oxFF) para identificar cuándo empieza una cabecera.
Si este último caso es el tuyo, deberías leer byte a byte buscando ese inicio de cabecera (el 0xFF en mi ejemplo, que no tiene que ser el real de tu GPS), leer entonces la cebecera (unos pocos bytes, los que diga el manual) y ahí obtener la longitud del mensaje que viene detrás. Lees entonces ese número de bytes para construir el mensaje. Si hay varios tipos de mensajes, también suele ser habitual que algún byte/s de la cabecera indique qué mensaje es.
Todo esto son ideas generales y habituales al enviar mensajes, sin ver el manual es difícil decirte el caso concreto.
Se bueno.
La verdad que estoy empezando con esto de paquetes TCP y tal (se nota...). En efecto, el paquete enviado por el GPS tiene una cabecera fija en Hex (0x67 0x67) y a continuación la longitud del paquete... Estructura completa:
Header: 0x67 0x67
Protocol: 0x01
Length: 0x00 0x0A
Serial: 0x00 0x01
Device ID: 0x01 0x23 0x45 0x67 0x89 0x01 0x23 0x45
Language: 0x01
Gracias por la ayuda, me ha aclarado varios conceptos, seguiré investigando.