J'ai besoin d'envoyer un structure sur une socket, le probleme est que l'on doit normalement envoyer un char *. Lorsque j'essaie de caster ma structure en char * ca ne passe pas.
Quelqu'un aurait une solution à me proposer ?
Merci.
J'ai besoin d'envoyer un structure sur une socket, le probleme est que l'on doit normalement envoyer un char *. Lorsque j'essaie de caster ma structure en char * ca ne passe pas.
Quelqu'un aurait une solution à me proposer ?
Merci.
Il me semble qu'on a déjà répondu à cette question (bon d'accord la question était comment envoyer une class par un socket mais bon class et structure c globalement la même chose).
La solution donnée est de crée une fonction qui a partir de ta structure crée un char* du type BOS |champ1 | champ2 |champ 3|EOS. (BOS et EOS pour delimiter ta structure).
Tu envoie ça et de l'autre coté tu recrée ta structure a partir du char * (strtok sur | pour récupérer chaque élément et castage si nécessaire).
Merci.
Il n'y a pas plus élégant que ça ?
Le pire c'est qu'en C j'ai déjà envoyé des structures sur des sockets et ça marchait très bien, je ne comprends pas qu'en C++ ça ne fonctionne pas.
Peut être qu'il existe une solution miracle que j'ignore.
Montre-nous le code que tu as utilisé, si tu l'as fait en C, en C++ ça doit marcher aussi. Il doit donc y avoir un léger problème de syntaxe au niveau des particularités du C++ je suppose...
Tutoriels sur les UPS, e-commerce, PHP, critiques de livres...
Pensez à consulter les FAQs et les cours et tutoriels.
FAQ Linux - Cours et tutoriels Linux - FAQ PHP - Cours et tutoriels PHP
Ce forum est fait pour vous et surtout par vous, merci d'en respecter les règles.
Je n'ai rien à voir avec la société www.ovh.com !
Envoyé par ovh
Le code que j'avais fait en C c'etait il y a plusieurs mois, sous LynOS et malheureusement je n'ai pas conservé les sources.
Par contre voila mon code C++:
dans un .h :
dans mon .cpp :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 struct Divers { int cpt; char texte[256]; int tab[2]; };
Et donc j'ai une erreur comme quoi je ne peux pas caster ma structure en char *
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Divers envoi; envoi.tab[0]=56; envoi.tab[1]=512; strcpy(envoi.texte,"bien recu"); envoi.cpt=89; send(_sock,(char *)envoi, sizeof(envoi),0);
C'est parce que tu ne donnes pas l'adresse de ta structure, mais directement l'objet lui-même. Rajoute & devant envoi et ça devrait marcher :
Dis-nous quoi.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 send(_sock,(char *)&envoi, sizeof(envoi),0);
Tutoriels sur les UPS, e-commerce, PHP, critiques de livres...
Pensez à consulter les FAQs et les cours et tutoriels.
FAQ Linux - Cours et tutoriels Linux - FAQ PHP - Cours et tutoriels PHP
Ce forum est fait pour vous et surtout par vous, merci d'en respecter les règles.
Je n'ai rien à voir avec la société www.ovh.com !
Envoyé par ovh
Ca passe à la compil mais je ne récupère rien de cohérent à priori.
normal essaye ca :
la fonction send envoie un tampon de données d'une certaine taille,il faut lui donner un pointeur sur les données.fait la même chose avec le recv
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Divers envoi; envoi.tab[0]=56; envoi.tab[1]=512; strcpy(envoi.texte,"bien recu"); envoi.cpt=89; send(_sock,(char *)&envoi, sizeof(envoi),0);
Envoyé par charon
Ben j'ai fait la même chose en reception mais je ne recois pas ma structure correctement.
Les données sont complètement aléatoires ou bien juste "décalées" ?
Montre-nous ton code de réception.
Tutoriels sur les UPS, e-commerce, PHP, critiques de livres...
Pensez à consulter les FAQs et les cours et tutoriels.
FAQ Linux - Cours et tutoriels Linux - FAQ PHP - Cours et tutoriels PHP
Ce forum est fait pour vous et surtout par vous, merci d'en respecter les règles.
Je n'ai rien à voir avec la société www.ovh.com !
est que les machine receptrices et émettrice ont le meme type de processeur.Je m'explique si on envoie des entiers d'un mac à un PC les octets vont être inversés du fait que les x86 sont en little endian et les mac en big endian
Envoyé par ovh
voila le code de réception :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Divers recu; recv(_sock1,(char *)&recu,sizeof(recu),0); cout << recu.cpt << endl;
Envoyé par ovh
voila le code de réception :
Au niveau de l'affichage, la j'ai: -858993460
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Divers recu; recv(_sock1,(char *)&recu,sizeof(recu),0); cout << recu.cpt << endl;
En pratique les machines tourneront toutes sous Windows, mais pour l'instant je teste tout sur une becane qui fait a la fois serveur et client.Envoyé par charon
j'ai trouvé mon erreur c'est bon, je n'avais pas fait de memset pour tab[] et texte....
Ca marche !!!
Merci à tous en tous cas.
affiche le retour de send et recv et apres l'execution affiche ::WSAGetLastError() ca permet de récupérer le numéro d'erreur des fonctions sur les sockets ca pourra donner une indication.Normalement si une erreur se produit send et recv renvoient la valeur SOCKET_ERROR
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager