Ho letto byte da un socket. I dati sono costituiti solo da due tipi di strutture:
struct A
{
unsigned char type_id; //0x01
unsigned char sequence_id; //Incremented in successive packets.
//Some other fields
unsigned char checksum;
};
struct B
{
unsigned char type_id; //0x02
unsigned char sequence_id; //Incremented in successive packets. This sequence is independent from A's sequence_ids.
//Some different fields
unsigned char checksum;
};
Queste strutture sono scritte sul filo senza particolari schemi di come si presentano. Questi sono gli unici dati che ricevo. Posso leggere i dati.
Sto cercando di capire come meglio identificare questi pacchetti nell'array unsigned char*
che ho letto. In questo momento sto iterando finché non trovo i byte 0x01
o 0x02
e poi in base alla dimensione della struttura rilevante, prova ad ottenere la struttura successiva. Una volta stabilito che ho trovato un confine di pacchetti, continuo a compensare di sizeof(A)
o sizeof(B)
di conseguenza e spero di star bene.
Il mio problema è che se c'è un valore 0x01
o 0x02
in un campo all'interno di una struct stessa quando sto verificando l'inizio di una struct, questo metodo restituirebbe strutture non valide.
Purtroppo non riesco a toccare il lato server. È piuttosto un vecchio sistema.
Un altro punto è che mi unisco come client a metà strada, cioè, il lato server continua a inviare dati - questo significa che il primo byte che ho letto la maggior parte delle volte non è l'inizio di un pacchetto.
Che cosa posso fare per identificare le strutture in modo efficace?