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

evinet Messages postés 1 Date d'inscription jeudi 20 septembre 2007 Statut Membre Dernière intervention 23 octobre 2008 - 23 oct. 2008 à 20:50
cs_LA_Tupac Messages postés 305 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 18 janvier 2012 - 9 févr. 2009 à 10:18
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

fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
24 oct. 2008 à 09:05
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 ?
0
cs_LA_Tupac Messages postés 305 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 18 janvier 2012 1
9 févr. 2009 à 10:18
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.
0
Rejoignez-nous