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

Réseau C Discussion :

Problème emission structure via UDP


Sujet :

Réseau C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 33
    Par défaut Problème emission structure via UDP
    Bonjour,
    J'ai une transmission UDP Broadcast.
    Je transmet une structure avec 2 champs UINT (unsigned int).
    Le premier champ de la structure est bien récupéré côté réception mais pas le 2ème champ.
    Je ne détaille pas tout.
    Voici le type de la structure qui est envoyée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    typedef struct dataTrame_send {
    	UINT 		ID;
    	UINT		IDTrame;
    } dataTrame_send_t;
    Le champ ID est bien récupéré mais pas le champ IDTrame (qui reste à la valeur initialisée zéro).
    Si j'aoute d'autres champs à la structure, ces champs ne sont pas modifiés.
    côté émission : (le socket est ok, le bind est ok)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    dataTrame_send_t messsend={0} ;
    dataTrame_send_t  * mess_send = &messsend;
    /* ... */
    mess_send->ID=1;
    mess_send->IDTrame=5;
    /* .. */
    sendto(comm_sock_service,mess_send,sizeof(mess_recv),0, (struct sockaddr *)&sin_service,sizeof(sin_service));
    côté réception : (le socket est ok)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    dataTrame_send_t messrecv={0} ;
    dataTrame_send_t  * mess_recv = &messrecv;
     
    recvfrom(sk_service, mess_recv,sizeof(mess_recv),0,(struct sockaddr *)&sin_service_recv, &dummy);
     
    printf ("mess_recv->ID : %i\n",mess_recv->ID); // affiche 1
    printf ("mess_recv->IDTrame : %i\n",mess_recv->IDTrame); // affiche 0

  2. #2
    Membre Expert Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 366
    Par défaut
    salut,

    erreur classique !!!

    sizeof(mess_recv) est la taille du pointeur de la structure pas la taille de la structure !!!

    il vaut mieux faire sizeof(dataTrame_send_t) ca éviter les erreurs.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 33
    Par défaut
    Merci fregolo52 !
    C'était effectivement le problème.
    Question additionnelle :
    Est-ce que je j'aurais pu faire un sizeof(var) (dans recv ou sento) si var n'avait pas été un pointeur ?

  4. #4
    Membre Expert Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 366
    Par défaut
    oui, comme par ex, dans ton cas : sizeof(messsend).

    D'ailleurs, des choses sont inutiles dans ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    dataTrame_send_t messsend={0} ;
    /* ... */
    messsend.ID=1;
    messsend.IDTrame=5;
    /* .. */
    sendto(comm_sock_service,&messsend,sizeof(messsend),0, (struct sockaddr *)&sin_service,sizeof(sin_service));
    C'est plus court et plus simple

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/02/2013, 16h27
  2. Probléme de connexion via un reseau local
    Par aurelien083 dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 15/03/2006, 17h07
  3. probléme avec include() via HTTP
    Par schlitters dans le forum Langage
    Réponses: 11
    Dernier message: 07/02/2006, 17h19
  4. [XSL]problème de liens via feuille de style, images....
    Par snoop dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 29/06/2005, 10h57
  5. [OCaml] Problème de structure/parser
    Par marv1 dans le forum Caml
    Réponses: 4
    Dernier message: 09/05/2005, 12h16

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