Transfert d'une chaine contenant des \0 sur une socket

Signaler
Messages postés
1
Date d'inscription
jeudi 20 septembre 2007
Statut
Membre
Dernière intervention
23 octobre 2008
-
Messages postés
305
Date d'inscription
jeudi 29 avril 2004
Statut
Membre
Dernière intervention
18 janvier 2012
-
Bonjour,

Je développe un simulateur d'équipement en C++ qui envoie des messages à un serveur en TCP. Le problème de ces paquets est qu'ils contiennent des caractères \0 car il s'agit de buffers et le serveur ne reçoit que les caractères envoyés avant le premier \0. Je crois avoir essayé tous les composants sockets à ma disposition, qu'ils soient winsock2 ou TClientSocket voir même TTcpClient pour envoyer ce type de message, mais je n'y parviens pas correctement.
Est-ce que le fait d'envoyer un char * avec une longueur spécifiée dans la méthode send (par exemple) force l'envoie de tous les carctères et pas seulement de ceux avabt le \0 qui a l'air de terminer la chaine envoyée ? Je ne met pas le serveur en cause puisqu'il fonctionne et que les équipements envoient déjà les données qui sont correctement interprétées.

Exemple de la chaine qui doit être envoyée en hexa : E8 C8 00 00 00 00 00 54 30 30 52 00
Je ne reçois à l'heure actuelle que E8 et C8.

D'avance merci.

2 réponses

Messages postés
1107
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
10 juillet 2018
4
salut

comment tu calcul la taille d'envoi du buffer sur la socket, j'espère que tu ne fais pas un strlen !!!
ca ne pose aucun problèles les '00' dans les buffers.
Dans ton exemple, es-tu sûre que la fonction send recoit 12 comme taille de buffer à envoyer ?
Messages postés
305
Date d'inscription
jeudi 29 avril 2004
Statut
Membre
Dernière intervention
18 janvier 2012

Ouep ce qui interesse c'est le strlen dans ton send !!! le '\0' ne bloque pas l'envoi.
remplace la taille : strlen(monbuffer); par 12*sizeof(char)
courage !!!! ;-)

moi : c'est du sata le disque dur ?
stagiaire : non c'est du maxtor.