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 :

Envoi de structure via socket


Sujet :

Réseau C

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2009
    Messages : 81
    Points : 57
    Points
    57
    Par défaut Envoi de structure via socket
    Bonjour tout le monde,

    J'ai 2 processus, envoi_struct et recoit_struct. Je lis ma structure avant de l'envoyer dans envoi_struct, puis je la relis dans recoit_struct. Le problème c'est que je n'ai pas le même résultat...
    Je vous joins mes 2 codes.

    envoi_struct:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
                    printf("Attente d'un client...\n");                 /*Attente de la connexion d'un client*/
                    csock = accept(sock, (SOCKADDR*)&csin, &crecsize);  /*Acceptation de la connexion client*/
                    printf("Un client se connecte avec la socket %d de %s:%d\n", csock, inet_ntoa(csin.sin_addr), htons(csin.sin_port));
     
     
                    printf("Buffer: %s\n",buff.Buffer);
                    printf("Fin de fichier: %d\n", buff.finFich);
                    send(sock, (char*)&buff, sizeof(struct sFich), 0);
                    getchar();
    recoit_struct:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            printf("Client connecte\n");
     
            recv(sock, (char*)&buff, sizeof(struct sFich), 0);
     
            printf("Buffer: %s\n", buff.Buffer);
            printf("Fin de fichier: %d\n", buff.finFich);
            getchar();
    Merci d'avance

  2. #2
    Membre éprouvé Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Points : 1 132
    Points
    1 132
    Par défaut
    C'est une très mauvaise idée que d'envoyer une structure telle quelle via un socket, il faut d'abord la sérialiser, si tu ne veux pas te compliquer la vie je te conseille d'utiliser un protocole textuel.

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Points : 705
    Points
    705
    Par défaut
    Bonjour,

    Pour compléter ce que dit ssmario2, quand tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    send(sock, (char*)&buff, sizeof(struct sFich), 0);
    tu n'envois surement pas ce que tu penses.
    En fait, si ta structure ne comporte que des variables de types de base (int, float, double, char, ...) ou des structures avec ces mêmes types, cela va fonctionner.
    Cependant, si ta structure comporte des pointeurs, le send va envoyer l'adresse mémoire pointée par le pointeur et non pas l'objet ou la variable pointée...
    Ce qui peut expliquer ces différences...

  4. #4
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 306
    Points
    5 306
    Par défaut
    sans compter les problèmes d'endiannes...

    Il faut toujours sérialiser une donnée structurée pour la transporter sur une socket.

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2009
    Messages : 81
    Points : 57
    Points
    57
    Par défaut
    Très bien, je suis donc, suivant vos conseils, passé par un protocole textuel!

    Merci pour vos réponses et de votre réactivité,

    Désolé pour cette réponse aussi longue...

    Bonne journée

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

Discussions similaires

  1. envoi de fichier via socket TCP
    Par thaiexpat dans le forum Réseau/Web
    Réponses: 1
    Dernier message: 27/11/2013, 20h08
  2. Envoi de fichier via socket FTP C / lib windows
    Par flash11 dans le forum Réseau
    Réponses: 1
    Dernier message: 03/02/2012, 15h56
  3. Envoi d'une structure via sockets
    Par milanoran dans le forum C++
    Réponses: 8
    Dernier message: 17/11/2010, 14h19
  4. Transmission/Réception partielle de structure via socket
    Par Djakisback dans le forum Réseau
    Réponses: 39
    Dernier message: 11/12/2009, 10h57
  5. Envoi de données via socket
    Par Popeye63 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 17/10/2007, 13h05

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