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 :

Broadcast : Network is unreachable


Sujet :

Réseau C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 30
    Par défaut Broadcast : Network is unreachable
    Bonjour à tous,

    J'essaie de faire du broadcast pour une application, voici mon code coté serveur :

    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
     
        struct sockaddr_in broadcast;
        broadcast.sin_addr.s_addr = INADDR_BROADCAST;
        broadcast.sin_family = PF_INET;
        broadcast.sin_port =htons(33333);
     
        int sock= socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
     
        int on = 1;
        char msg[1024];
        strcpy(msg,message.c_str()); // message passé en parametre de fonction, c'est un string
     
        int idSet = setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (char*)&on, sizeof(on));
        if(idSet == -1)
            erreur("Probleme de setsockopt");
        else cout<<idSet;
     
        int idSend = sendto(sock, msg, sizeof(msg),0, (struct sockaddr*)&broadcast, sizeof(broadcast));
        if(idSend== -1)
        {
            perror("Erreur sendto()");
            erreur("Erreur envoi de message par le broadcast");
        }
    J'ai le droit en résultat à : Erreur sendto() : Network is unreachable

    J'explique le contexte (en gros):
    J'ai un serveur qui lance un thread à chaque fois qu'un client se connecte. Si un client fais une action particulière je dois pouvoir en avertir les autres clients connectés, d'où l'utilisation de broadcast.

    Voila j'espere que quelqu'un pourra m'éclairer la dessus, et si vous avez besoin d'autres explciations sur le reste de mon code, je me tiens à votre disposition

    Cordialement

    P.S : Tapez pas trop fort si j'ai fait une grosse connerie

  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
    Je crois qu'il faut utiliser ntohl() pour les INADDR_xxx...
    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 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 30
    Par défaut
    Bonjour,

    J'ai testé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    broadcast.sin_addr.s_addr = ntohl(INADDR_BROADCAST);
    Et j'ai toujours la meme erreur en retour ...

    En fait je me pose la question, cette erreur vient elle :
    _mauvaise configuration d'un client ? (pas en écoute au bon endroit ou n'importe quoi ..)
    _mauvaise configuration du serveur ? (j'opte pour ça mais on sait jamais ...)

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    A moins que erreur ne mette, d'une manière ou d'une autre, fin à l'exécution, il y a déjà un problème au niveau de ton test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        if(idSet == -1)
            erreur("Probleme de setsockopt");
        else cout<<idSet;
    En effet, tel qu'il est écrit, tu passe à la ligne suivant quoi qu'il arrive (que idSet soit égal à -1 ou non) ... avec, pour conséquence immédiate que... ton socket n'est peut être pas correctement créé, et donc, que ton réseau soit inaccessible

    Si, maintenant, erreur (dont on ignore tout, ici) lance une exception ou un exit(1), nous dirons que je n'ai rien dit
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Malgré l'utilisations de std::cout et std::string de-ci de-là, ton problème est plus probablement lié à l'API BSD pour les sockets. Je déplace donc côté forum C/Réseau.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 30
    Par défaut
    Citation Envoyé par koala01 Voir le message
    Salut,

    A moins que erreur ne mette, d'une manière ou d'une autre, fin à l'exécution, il y a déjà un problème au niveau de ton test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        if(idSet == -1)
            erreur("Probleme de setsockopt");
        else cout<<idSet;
    En effet, tel qu'il est écrit, tu passe à la ligne suivant quoi qu'il arrive (que idSet soit égal à -1 ou non) ... avec, pour conséquence immédiate que... ton socket n'est peut être pas correctement créé, et donc, que ton réseau soit inaccessible

    Si, maintenant, erreur (dont on ignore tout, ici) lance une exception ou un exit(1), nous dirons que je n'ai rien dit
    Bonjour,

    En effet erreur est une fonction m'afficghant le message d'erreur passé en parametre et mettant fin au thread en cours

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 30
    Par défaut
    Bonjour,

    Apperement j'ai trouvé une solution qui semble fonctionner , j'ai modifié :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    broadcast.sin_addr.s_addr = INADDR_BROADCAST;
    Par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    broadcast.sin_addr.s_addr = INADDR_ANY;
    Cela à l'air de fonctionner, meme si je n'ai testé que sur un réseau local pour le moment

Discussions similaires

  1. axis: Network is unreachable
    Par happyman dans le forum Services Web
    Réponses: 1
    Dernier message: 10/06/2011, 11h41
  2. [Helios/Ubuntu] Problème "Network is unreachable"
    Par hed.java dans le forum Eclipse
    Réponses: 4
    Dernier message: 31/10/2010, 15h35
  3. Appel WebService : "Network is unreachable"
    Par Akhloryne dans le forum Services Web
    Réponses: 0
    Dernier message: 23/08/2010, 11h17
  4. pb : network is unreachable (Tomcat 4.1 Eclipse 3.3.1.1)
    Par titifefe dans le forum Tomcat et TomEE
    Réponses: 0
    Dernier message: 24/09/2009, 16h50
  5. network is unreachable. connexion impossible a la VM
    Par amateur_will dans le forum Réseau
    Réponses: 1
    Dernier message: 24/08/2009, 18h00

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