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 :

Fonction bind qui marche uniquement en local!


Sujet :

Réseau C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 82
    Par défaut Fonction bind qui marche uniquement en local!
    Bonjour,

    Une fois de plus je fais appel à plus fort que moi.

    Cette fois ci un problème très étrange! Enfin je suis sûr que c'est tout bête, mais j'avoue que je ne comprends pas du tout d'où peut venir mon erreur!

    Comme le dit si bien le titre, cela provient de la fonction bind.
    Je programme tranquillement un client/serveur basique en local ( 127.0.0.1 ). Jusque là ça fonctionne nickel!

    Tant mieux, je passe au test suivant, le test sur le net ( ip non local quoi ), et là impossible de passer le bind!

    Pourtant c'est strictement le même code qu'en local, et c'est le même code qu'on trouve partout sur internet à savoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SOCKET sock = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );
    SOCKADDR_IN address;
        addressRecv.sin_addr.s_addr = inet_addr( INADDR_ANY );
        addressRecv.sin_family = AF_INET;
        addressRecv.sin_port = htons( port );
    bind( sock, (SOCKADDR *)&address, sizeof(address) ); // = SOCKET_ERROR ( sauf quand je test en local )
    Sachant que j'ai quand même épuré un peu ici. J'ai enlevé la gestion du thread réseau et la gestion des erreurs.

    La fonction WSAGetLastError() me renvoie un joli "0" pour finir le tout...

    J'ai pensé à un problème de pare feu, mais j'ai tout désactivé et rien à y faire.

    Merci pour votre aide.

    EDIT : je confirme, quand je mets "127.0.0.1" à la place de INADDR_ANY ça marche...

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    Que vaut errno après le retour de bind() ? Est-tu sûr de ne pas déjà avoir quelque chose de bindé sur le port demandé ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 82
    Par défaut
    Je ne pense vraiment pas avoir autre chose de bindé sur le port, j'ai déjà fait quelques testes pour éloigner cette piste. Notamment tenté de binder sur différent port au hasard. De plus je ne vois pas pourquoi cela fonctionnerait en local du coup .

    Pour le errno, j'ai pas le courage de m'y remettre ce soir, je verrais ça demain! Merci pour ta réponse.

  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
    Normalement, tu n'as pas à utiliser inet_addr si tu utilises INADDR_ANY...
    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 confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 82
    Par défaut
    Merci!!

    Effectivement, j'avais d'abord commencé par mettre : inet_addr( "127.0.0.1" ); que j'ai par la suite changer en inet_addr( INADDR_ANY ); sans réfléchir!

    Je passe aux tests et je vous tiens au courant, mais ça devrait mieux fonctionner .

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 82
    Par défaut
    Parfait!

    Merci pour votre aide.

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

Discussions similaires

  1. [AC-2013] Fonction compte qui marche pas bien
    Par djibouli dans le forum Macros Access
    Réponses: 4
    Dernier message: 12/07/2014, 10h41
  2. fonction pluriel qui marche pas
    Par l1informatique dans le forum Général Python
    Réponses: 27
    Dernier message: 26/01/2014, 22h04
  3. fonction drawrect qui marche pas bien..
    Par pikaTuX dans le forum Objective-C
    Réponses: 2
    Dernier message: 22/07/2010, 13h07
  4. fonction javascript qui marche pas
    Par iam dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 25/02/2008, 14h46
  5. Fonction javascript qui marche qu'une fois sous Firefox
    Par ns_deux dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 30/08/2006, 10h38

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