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

Entrée/Sortie Java Discussion :

Bind Exception: Address already in use: connect


Sujet :

Entrée/Sortie Java

  1. #1
    Membre régulier
    Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2004
    Messages : 201
    Points : 96
    Points
    96
    Par défaut Bind Exception: Address already in use: connect
    Bonjour,

    Je me connecte en boucle avec une socket et j'envois une commande. Arrivé à un grand nombre de connections (vers la 2000 eme), j'ai une
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.net.BindException: Address already in use: connect
    D'ou cela viens. J'ai fait pas mal de recherches, et aucune solution ne correspond. C'est un prob plutôt client ou serveur ?

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Tu tentes d'ouvrir une socket sur un port qui est déjà utilisé...

    Citation Envoyé par metalcoyote
    C'est un prob plutôt client ou serveur ?
    Le problème vient du programme qui génère l'erreur : donc c'est à toi de nous le dire !

    a++

  3. #3
    Membre averti Avatar de Rayndell
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    289
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 289
    Points : 323
    Points
    323
    Par défaut
    Généralement c'est plutôt un problème côté serveur, mais poste donc ton code pour saisir l'erreur.

  4. #4
    Membre expert
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Points : 3 401
    Points
    3 401
    Par défaut
    Si tu regardes la doc , tu verrais
    Citation Envoyé par JavaDoc
    Signals that an error occurred while attempting to bind a socket to a local address and port. Typically, the port is in use, or the requested local address could not be assigned.
    La plupart du temps, de mon expérience personnelle, les BindException sont dues à la tentative d'utilisation d'un port déjà utilisé. Par exemple, tu essais d'ouvrir un ServerSocket sur le port 80, mais tu as déjà un autre programme qui écoute dessus ce port, il y a donc une BindException pour te signaler que ce port est déjà utilisé, et que tu dois en choisir un autre.

    Je me demande pourquoi tu as 2000 connexions, peux tu nous en dire plus ?

    Merci.

  5. #5
    Membre averti Avatar de Rayndell
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    289
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 289
    Points : 323
    Points
    323
    Par défaut
    Pour remédier à cela, essaie d'utiliser un port qui a peu de chances d'être utilisé (> 10000 par exemple). Si tu utilises un pare-feu ou un routeur, n'oublie pas de configurer pour laisser passer les paquets vers ce port.

  6. #6
    Membre régulier
    Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2004
    Messages : 201
    Points : 96
    Points
    96
    Par défaut
    En fait je veux faire un test de preformance : je me connecte via une socket a un serveur, j'envoie une commande, le serveur répond. Le but est de compter le temps pour effectuer toutes ces commandes...
    Je fais donc une boucle for qui répète 10000 fois le code suivant:
    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
     
     
    			Socket socket = new Socket("serveur", 50008);
    			BufferedReader rd = new BufferedReader(new InputStreamReader(socket.getInputStream()));
     
    PrintWriter wr = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
     
    			wr.print("test".toString());
    			wr.flush();
     
                           char c = (char) rd.read();
    			System.out.println("*** Command return char: " + c);
     
    			rd.close();
    			wr.close();
    			socket.close();
    			return result;
    (j'ai supprimé qq parties non essentielles)

    Tout se passe donc tres bien jusqu'à environ 2 000 itérations puis ca pete.
    J'ai mis un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println("Port: "+socket.getLocalPort());
    pour voir les ports utilisés.
    Et mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    socket.setReuseAddress(true);
    Pour mieux liberer les ports, enfin j'ai vu ca sur internet. Les ports seraient tous dans un état bloqué...

  7. #7
    Membre régulier
    Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2004
    Messages : 201
    Points : 96
    Points
    96
    Par défaut
    Bon j'ai trouvé la réponse, ca viens d'un paramètre de la base de registre de windows.

    Voir ici

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

Discussions similaires

  1. could not bind socket !address already in use
    Par slimix00 dans le forum Linux
    Réponses: 2
    Dernier message: 23/08/2012, 09h55
  2. [TCP] bind() : Address already in use
    Par xenos dans le forum Réseau
    Réponses: 5
    Dernier message: 17/04/2010, 17h24
  3. Réponses: 1
    Dernier message: 16/02/2010, 22h00
  4. java.net.BindException: Address already in use: connect
    Par Spiff__ dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 10/08/2009, 06h54
  5. Bind(): address already in use
    Par adesport dans le forum Réseau
    Réponses: 3
    Dernier message: 18/01/2009, 12h27

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