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 :

socket : erreur avec bind()


Sujet :

Réseau C

  1. #1
    Membre éclairé Avatar de horkets
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    326
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 326
    Par défaut socket : erreur avec bind()
    Bonsoir,

    J'obtiens l' erreur : Address already in use en tentant de faire un bind() avec une nouvelle socket

    Quelqu'un pourrait m'expliquer pourquoi ?

    PS : la socket utilisée précédemment à été fermée close() et deliée unlink()

    merci d'avance

  2. #2
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par défaut
    est ce que tu n'utiliserais pas un port standard deja ouvert ?

  3. #3
    Membre éclairé Avatar de horkets
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    326
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 326
    Par défaut
    J'utilise le port 5000

    Ce qui est bizarre, c'est que je me connecte une premiere fois normalement sans erreurs.
    Est ce qu'il y aurait autre chose à faire pour casser le lien entre la socket et le port ?

  4. #4
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par défaut
    est ce que tu fais une appli multi-threadé ?

  5. #5
    Membre éclairé Avatar de horkets
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    326
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 326
    Par défaut
    euh ...

    Voilà ce que j'essaie de faire :

    un processus server tourne en boucle avec while()
    un socket est créé et lié au port 5000 pour écouter les connections sur ce même port
    un client se connecte au port 5000 et envoi un message texte via le socket,
    le server affiche le message reçu et renvoi une reponse que le client reçoit et affiche lui aussi.
    le server et le client ferme ensuite leur socket chacun de leur côté.

    Jusqu'ici tout va bien

    le server delie ensuite le socket du port avec unlink()

    A ce nivau ci , je ne sais pas si la liaison a bien été cassée ...

    le programme retourne au début de la boucle,
    un nouveau socket est créé (puisque le précédent à été fermé)
    ce nouveau socket est lié avec bind() et c'est à ce moment que je reçoit l'erreur : ADDRESS ALREADY IN USE



    Il existe accept qui je pense me permet d'ouvrir plusieurs connection en fonction des demandes affluantes ... (je dois encore me renseigner sur le sujet)

  6. #6
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par défaut
    euh tu fais le bind dans la boucle ?

  7. #7
    Membre éclairé Avatar de horkets
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    326
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 326
    Par défaut
    oui , en fait ...
    Apparemment c'est pas comme cela que cela fonctionne
    La création et le bind doivent se faire en dehors de la boucle donc,
    ensuite viendrait la boucle dans laquelle on place l'appel accept() et tout le reste ?

  8. #8
    Membre éclairé Avatar de horkets
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    326
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 326
    Par défaut
    Génial !
    je viens d'essayer et je parviens à me connecter plus d'une fois sans erreur !
    merci beaucoup !

    to be continued ...

  9. #9
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par horkets
    oui , en fait ...
    Apparemment c'est pas comme cela que cela fonctionne
    La création et le bind doivent se faire en dehors de la boucle donc,
    ensuite viendrait la boucle dans laquelle on place l'appel accept() et tout le reste ?
    Ouf, c'est ce que j'ai indiqué ici :

    http://emmanuel-delahaye.developpez.com/reseaux.htm

  10. #10
    Membre éclairé Avatar de horkets
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    326
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 326
    Par défaut
    Ah si j'avais su j'aurais visité ce tutos là depuis longtemps ...
    en tout les cas, grace au nombreux plantages et aux nombreuses recherches effectuées, cela m'a permis de comprendre pas mal de chose (en sachant qu'il y a encore du boulot...)

    Ceci dit, une question persiste : On peut ecrire dans un socket avec write() et envoyer des données avec recv()

    Quelle est la différence
    qu'est ce qui est le plus efficace ?

    merci d'avance

  11. #11
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    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 397
    Par défaut
    1. On n'envoie pas des données avec recv(), mais avec send().
    2. send() est plus portable. Sur un système où les sockets ne sont pas des descripteurs (au hasard: Windows), write() ne marchera pas.
    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.

  12. #12
    Membre éclairé Avatar de horkets
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    326
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 326
    Par défaut
    ...
    On n'envoie pas des données avec recv(), mais avec send().
    ...

    C'est lundi pour tout le monde ...

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

Discussions similaires

  1. erreur avec socket "un argument non valide à ete fournie"
    Par Abdelweheb dans le forum Réseau
    Réponses: 1
    Dernier message: 16/05/2012, 09h14
  2. Erreur avec binding: cast d'un objet de type MS.Internal.NamedObject
    Par Takumi dans le forum Windows Presentation Foundation
    Réponses: 8
    Dernier message: 13/07/2010, 18h14
  3. Erreur avec le paramètre binding
    Par verbose dans le forum JSF
    Réponses: 11
    Dernier message: 24/07/2007, 09h36
  4. socket : problème avec GetHostByName
    Par SteelBox dans le forum Réseau
    Réponses: 25
    Dernier message: 19/08/2003, 13h49
  5. App Socket Raw avec VC++6
    Par Martin Soucy dans le forum Développement
    Réponses: 3
    Dernier message: 04/12/2002, 05h07

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