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 :

Send() une matrice de structure en SOCKET


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 18
    Par défaut Send() une matrice de structure en SOCKET
    Bonjour

    J'essaie de connaitre la taille de ma matrice de structure pour l'envoyer, seulement, je ne recois pas toute les données.

    Voici les éléments :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Mon prototype de structure :
     
    typedef enum {Vide, Ver, Plante} te_Nourriture;
    typedef enum {Rien, Petit, Moyen, Plein, Pierre} te_Etatterre;
    typedef struct {te_Nourriture Nourriture; int ptNourriture; te_Etatterre eEtatterre; int eTaupes;} t_motte;
     
    Mon allocation de ma structure est celle ci :
     
    	t_motte** pMotte;
    	// allocation mémoire pour le tableau de sous-tableaux :
    	pMotte = (t_motte**) malloc(elmax * sizeof(t_motte*));
     
    	// allocation mémoire pour chaque sous-tableau de de structure :
    	for (eLigne = 0; eLigne < elmax; eLigne++)
    		pMotte[eLigne] = (t_motte*) malloc(ecmax * sizeof(t_motte));
     
    Jusque là pas de soucis et mon envoi :
     
    	for(eLigne=0;eLigne<elmax;eLigne++)
    		send(csock[eNombreJoueurIncremente], pMotte[eLigne], ecmax*sizeof(pMotte), 0);
     
    Ma réception :
     
    	for (eLigne = 0; eLigne < elmax; eLigne++)
    		recv(csock[eNombreJoueurIncremente], pMotte[eLigne], ecmax*sizeof(pMotte), 0);
    Merci d'avance

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    send() et recv() retournent le nombre d'octets envoyés/reçus. Il peut être nécessaire d'appeler recv() en boucle.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 18
    Par défaut
    C'est pas déjà ce que j'ai fait ?

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Pas correctement. Tu dois calculer la taille totale de ton envoi, et appeler recv() en boucle en comptant les tailles reçues jusqu'à tout avoir reçu.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 18
    Par défaut
    Hummm je vois pas très bien comment procéder :/
    Pour moi j'avais fait un code correct avec ce que j'avais lu

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Ce qu'il faut savoir, c'est que recv() peut recevoir moins que la taille que tu lui passes en paramètre.

    PS: Pour ton tableau 2D, si ses dimensions sont fixes, je te conseille de l'allouer avec une telle fontion à la place: Comme ça, tu auras un tableau d'un seul tenant dont tu pourras te servir comme d'un seul buffer pour tes appels à recv() en boucle.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

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

Discussions similaires

  1. utilisé deux structures pour une matrice
    Par simplyc dans le forum Débuter
    Réponses: 3
    Dernier message: 01/12/2010, 14h05
  2. Envoi d'une structure via sockets
    Par milanoran dans le forum C++
    Réponses: 8
    Dernier message: 17/11/2010, 14h19
  3. Envoi d'une matrice sur socket UDP
    Par caubios dans le forum Qt
    Réponses: 0
    Dernier message: 10/02/2010, 19h10
  4. [Structure] Stockage d'une matrice en XML
    Par mamid1706 dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 15/03/2007, 16h14
  5. Afficher les valeurs d'une structure dans une matrice
    Par yabbiyou dans le forum MATLAB
    Réponses: 1
    Dernier message: 22/02/2007, 12h26

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