IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

[toFAQ][socket] Envoi d'une structure [FAQ]


Sujet :

C++

  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    D�cembre 2002
    Messages
    64
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2002
    Messages : 64
    Par d�faut [toFAQ][socket] Envoi d'une structure
    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.

  2. #2
    zul
    zul est d�connect�
    Membre chevronn� Avatar de zul
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    498
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 498
    Par d�faut
    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).

  3. #3
    Membre confirm�
    Profil pro
    Inscrit en
    D�cembre 2002
    Messages
    64
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2002
    Messages : 64
    Par d�faut
    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.

  4. #4
    ovh
    ovh est d�connect�
    R�dacteur
    Avatar de ovh
    Homme Profil pro
    Architecte devops web full stack
    Inscrit en
    Mai 2002
    Messages
    3 842
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 47
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Architecte devops web full stack

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 842
    Par d�faut
    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 !

  5. #5
    Membre confirm�
    Profil pro
    Inscrit en
    D�cembre 2002
    Messages
    64
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2002
    Messages : 64
    Par d�faut
    Citation Envoy� par ovh
    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...

    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 :

    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];
    };
    dans mon .cpp :

    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);
    Et donc j'ai une erreur comme quoi je ne peux pas caster ma structure en char *

  6. #6
    ovh
    ovh est d�connect�
    R�dacteur
    Avatar de ovh
    Homme Profil pro
    Architecte devops web full stack
    Inscrit en
    Mai 2002
    Messages
    3 842
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 47
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Architecte devops web full stack

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 842
    Par d�faut
    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 :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    send(_sock,(char *)&envoi, sizeof(envoi),0);
    Dis-nous quoi.

    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 !

  7. #7
    Membre confirm�
    Profil pro
    Inscrit en
    D�cembre 2002
    Messages
    64
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2002
    Messages : 64
    Par d�faut
    Citation Envoy� par ovh
    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 :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    send(_sock,(char *)&envoi, sizeof(envoi),0);
    Dis-nous quoi.

    Ca passe � la compil mais je ne r�cup�re rien de coh�rent � priori.

  8. #8
    Membre averti
    Profil pro
    D�veloppeur Full Stack
    Inscrit en
    F�vrier 2003
    Messages
    29
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur Full Stack

    Informations forums :
    Inscription : F�vrier 2003
    Messages : 29
    Par d�faut
    normal essaye ca :
    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);
    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

  9. #9
    Membre confirm�
    Profil pro
    Inscrit en
    D�cembre 2002
    Messages
    64
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2002
    Messages : 64
    Par d�faut
    Citation Envoy� par charon
    normal essaye ca :
    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);
    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

    Ben j'ai fait la m�me chose en reception mais je ne recois pas ma structure correctement.

  10. #10
    ovh
    ovh est d�connect�
    R�dacteur
    Avatar de ovh
    Homme Profil pro
    Architecte devops web full stack
    Inscrit en
    Mai 2002
    Messages
    3 842
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 47
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Architecte devops web full stack

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 842
    Par d�faut
    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 !

  11. #11
    Membre averti
    Profil pro
    D�veloppeur Full Stack
    Inscrit en
    F�vrier 2003
    Messages
    29
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur Full Stack

    Informations forums :
    Inscription : F�vrier 2003
    Messages : 29
    Par d�faut
    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

  12. #12
    Membre confirm�
    Profil pro
    Inscrit en
    D�cembre 2002
    Messages
    64
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2002
    Messages : 64
    Par d�faut
    Citation Envoy� par ovh
    Les donn�es sont compl�tement al�atoires ou bien juste "d�cal�es" ?
    Montre-nous ton code de r�ception.

    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;

  13. #13
    Membre confirm�
    Profil pro
    Inscrit en
    D�cembre 2002
    Messages
    64
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2002
    Messages : 64
    Par d�faut
    Citation Envoy� par ovh
    Les donn�es sont compl�tement al�atoires ou bien juste "d�cal�es" ?
    Montre-nous ton code de r�ception.

    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;
    Au niveau de l'affichage, la j'ai: -858993460

  14. #14
    Membre confirm�
    Profil pro
    Inscrit en
    D�cembre 2002
    Messages
    64
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2002
    Messages : 64
    Par d�faut
    Citation Envoy� par charon
    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
    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.

  15. #15
    Membre confirm�
    Profil pro
    Inscrit en
    D�cembre 2002
    Messages
    64
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2002
    Messages : 64
    Par d�faut
    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.

  16. #16
    Membre averti
    Profil pro
    D�veloppeur Full Stack
    Inscrit en
    F�vrier 2003
    Messages
    29
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur Full Stack

    Informations forums :
    Inscription : F�vrier 2003
    Messages : 29
    Par d�faut
    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

Discussions similaires

  1. Envoi d'une structure via sockets
    Par milanoran dans le forum C++
    R�ponses: 8
    Dernier message: 17/11/2010, 14h19
  2. Envoi d'une structure de structure
    Par renovati0 dans le forum R�seau
    R�ponses: 5
    Dernier message: 06/06/2010, 03h53
  3. [Socket][Byte] Probleme d'envoi d'une taille de fichier
    Par Erok dans le forum Entr�e/Sortie
    R�ponses: 14
    Dernier message: 12/05/2009, 17h38
  4. [C#] Envoi d'une structure par un(e) socket
    Par joprog dans le forum Windows Forms
    R�ponses: 2
    Dernier message: 02/03/2007, 11h29
  5. [SOCKET] Envoi de structure
    Par Lolita59 dans le forum R�seau
    R�ponses: 3
    Dernier message: 17/05/2006, 15h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo