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
Partager