Transfert d'une chaine contenant des \0 sur une socket
evinet
Messages postés1Date d'inscriptionjeudi 20 septembre 2007StatutMembreDernière intervention23 octobre 2008
-
23 oct. 2008 à 20:50
cs_LA_Tupac
Messages postés305Date d'inscriptionjeudi 29 avril 2004StatutMembreDernière intervention18 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.
fregolo52
Messages postés1114Date d'inscriptionmercredi 15 juin 2011StatutMembreDernière intervention 6 mai 20214 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 ?
cs_LA_Tupac
Messages postés305Date d'inscriptionjeudi 29 avril 2004StatutMembreDernière intervention18 janvier 20121 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.