Pb d'envoi de la valeur 0x00 via réseau

Résolu
frufu Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -  
frufu Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tou(te)s

Je travaille en C++ sous Dev C++ sous windows 7.

Cela fait plusieurs jours que je butte sur un problème (j'écume les forums en ce moment).
Je dois transmettre des valeurs en UDP multicast selon un format bien précis (int sur 4 octets, int sur 8 octets, float sur 4 octets...)
Pour controler les valeurs transmises j'affiche la trame et j'effectue un espionnage via Wireshark.

Mon soucis concerne la valeur 0x00. Celle-ci s'enregistre correctement dans ma trame car j'arrive à bien l'afficher dans ma console par contre impossible de la retrouver dans Wireshark (message "MISSING_DATA: not enough data to read type").
Si je remplace 0x00 par n'importe qu'elle autre je n'ai plus aucun soucis de transmission (mais du coup le logiciel recevant l'information ne comprend plus rien :s )

voici un extrait de mon code :
(j'ai supp l'initialisation socket pour alléger le post car (à prioris) pas de pb de transmission vu que je vois passer mes trames sur Wireshark)

int main(void)
{
unsigned int HEADER = 100;
unsigned int LENGHT=20;
unsigned int VAL_1= 5; // valeur pour l'exemple
unsigned int VAL_2= 10; // valeur pour l'exemple
int i=0;
char message[512];

sprintf(message,"%4c%4c%4c%8c",HEADER,LENGHT,VAL_1,VAL_2); // %4 pour respecter mes 4 octets, par contre je m'aperçois qu'il m'enregistre des 0x20 pour combler les "vides".

do // du coup je me fais une petite boucle pour remettre de 0x00 à la place des 0x20
{
if (message[i] == 0x20)
{message[i] = 0x00;} //message[ascii]-0x26;}
i++;
}while(i!=511);

printf("message = %s\n 1er octet= 0x%x \n 2eme octet = 0x%x \n\n", message, message[0], message[3]); // la j'ai la trame qu'il me faut avec bien mes 0x00 et 0x64 pour ma valeur 100

if (sendto(s, message, strlen(message) , 0 , (struct sockaddr *) &si_other, slen) == SOCKET_ERROR)
{
printf("sendto() failed with error code : %d" , WSAGetLastError());
system("pause");
exit(EXIT_FAILURE);
}
}

Si je laisse 0x20 je retrouve bien mes valeurs dans Wireshark mais moi j'ai besoin de 0x00

Merci d'avance pour les ames charitables qui auraient un peu de temps (et de connaissances ;)) à me consacrer.

2 réponses

Dalfab Messages postés 706 Date d'inscription   Statut Membre Dernière intervention   101
 
Bonjour,

Emettre des octets sur un réseaux, ça n'est pas émettre des caractères.
Il ne faut pas utiliser strlen(message) qui s'arrête au premier 0x00.
Il faut à la placer indiquer le nombre d'octets à transmettre.
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
Je suggère de remplacer
strlen(message)
par
LENGHT
.
0
frufu Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
Grand merci à vous deux pour votre réponse qui a solutionné mon souci !!!

(quand je pense au temps que j'y ai passé avant de poster... argghhh)
0