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 :

sendto() d'une structure sockaddr


Sujet :

C

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 189
    Par défaut sendto() d'une structure sockaddr
    Bijour' !

    J'ai un petit problème... Je suis entraint de créer un programme p2p pour les cours et je bloque sur l'envoye d'une adresse avec son ip...

    En fait, de mon tracker, j'envoie une structure sockaddr_in à mon client...
    Le prolème est que le client ne recoit pas correctement cette structure, en faisant des printf, la structure sockaddr_in reponse dans le client avant et après réception du message reste la meme alors qu'elle devrai contenir la structure envoyé par le tracker.

    Merci d'avance pour votre aide !

    CLIENT:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    struct sockaddr_in reponse ; // DEMANDER AU PROF PK CA MARCHE PAS AVEC * reponse
     
    			printf("%s\n", inet_ntoa(reponse.sin_addr.s_addr)) ;	
    			if(recvfrom(s,&reponse,sizeof(struct sockaddr_in *), 0, (struct sockaddr *) &tracker, &lg)<0)
    			{
    				perror("Erreur lors de la reception de la réponse") ;
    				exit(-1) ;
    			}	
     
    			printf("%s\n", inet_ntoa(reponse.sin_addr.s_addr)) ;

    TRACKER
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int bloc ;		
    			sscanf(buf, "%d", &bloc) ;
    			//printf("%d\n", bloc) ;
    			reponse = envoiInfoBloc(tab, bloc) ; // choisi quelle adresse prendre
    			printf("%s\n", inet_ntoa(reponse->sin_addr.s_addr)) ;
     
    			if(sendto(s,reponse,sizeof(struct sockaddr_in *),0,(struct sockaddr *) &client, sizeof(client))<0)
    			{
    				perror("erreur envoi reponse") ;
    				exit(2) ;
    			}

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    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 393
    Par défaut
    tu as initialisé lg à sizeof(struct sockaddr_in) avant ?

    Et recvfrom() ne demande qu'une seule structure SOCKADDR : ton &response est invalide, ici tu dois mettre le buffer de réception...
    (à moins que tu veuilles vraiment envoyer et recevoir une structure sockaddr_in...

    De plus, ton printf affiche inet_ntoa(une adresse non-initialisée)...

    Enfin bref, c'est bizarre...
    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 confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 189
    Par défaut
    Citation Envoyé par Médinoc
    tu as initialisé lg à sizeof(struct sockaddr_in) avant ?
    oui c'est fait ....

    oui en fait je veux envoyer et recevoir une structure sockaddr ...

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 189
    Par défaut
    C'est bon j'ai trouvé...

    tout simplement lors de l'envoi et de la réception, il fallait enlever l'* dans le 3° argument...
    et également faire un malloc de reponse...

    voila, si jamais vous aussi vous avez des prolèmes, prenez exemple.... c'est une erreur vraiment tout pourrie qui fait perdre du temps !!!

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

Discussions similaires

  1. sizeof() d'une structure
    Par tut dans le forum MFC
    Réponses: 12
    Dernier message: 29/08/2006, 18h21
  2. [Initialisation] Remplir une structure une fois
    Par Kimael dans le forum Langage
    Réponses: 14
    Dernier message: 08/06/2004, 15h33
  3. Comment mettre en place une structure 3 tiers.
    Par WOLO Laurent dans le forum Débats sur le développement - Le Best Of
    Réponses: 13
    Dernier message: 27/07/2003, 22h01
  4. [toFAQ][socket] Envoi d'une structure
    Par julien20vt dans le forum C++
    Réponses: 15
    Dernier message: 23/04/2003, 15h47
  5. longueur d'une structure
    Par bohemianvirtual dans le forum C
    Réponses: 6
    Dernier message: 28/05/2002, 18h31

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