Récupérer le numéro d'un port libre

Résolu
Signaler
Messages postés
206
Date d'inscription
samedi 29 octobre 2005
Statut
Membre
Dernière intervention
7 mars 2012
-
Messages postés
206
Date d'inscription
samedi 29 octobre 2005
Statut
Membre
Dernière intervention
7 mars 2012
-
Bonjour,

je voudrais savoir comment peut-on récupérer le numéro d'un port libre en java?

Merci pour votre aide

2 réponses

Messages postés
20
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
13 décembre 2010

Bonjour,

Deux solutions :

soluce 1) Tu veux maîtriser le numéro de port à allouer :

1 a) soit tu fais confiance à /etc/services (Unix) (\WINDOWS\system32\drivers\etc\services pour Windows) en le parcourant et tu prends le port max + 1 (bof ?!)

1 b) soit tu suis la convention : les ports inférieurs à 1024 sont réservés aux services standards et donc tu parcours la liste des ports en cours alloués dynamiquement par le système (> 1024) , cf rpcinfo
-p Unix, netstat
-an sous Unix + windows, avec Runtime.exec() (bof aussi)

1 c)Méthode un peu brute (quoi que ...) : avec les classes java.net.BindException java.net.ServerSocket

tu peux faire un truc genre:

int localport = 1024;

boolean bindIsDone = false;

final int nombreMaxTentative = 1000 ;

ServerSocket server = null ;

int tentative = 0;

while (!bindIsDone && tentative <= nombreMaxTentative){

try{

tentative++;
localport++;
server = new ServerSocket(localport);
bindIsDone = true ;

}catch (Exception e){

if ( !(e instanceOf BindException) ) throw e;

}

if (bindIsDone) //localport est bien libre

}
2) enfin la solution la plus simple mais tu ne choisis pas ton port :

ServerSocket server = new ServerSocket(0);

int lePortAlloueEtQuiEtaitLibre = server.getLocalPort();

ed
Messages postés
206
Date d'inscription
samedi 29 octobre 2005
Statut
Membre
Dernière intervention
7 mars 2012

Merci,

en fait je cherchai un port libre aléatoire, après avoir accepté une connexion et l'avoir accepté, le serveur envoyai une numéro de port libre pour discuter et ainsi laisser le port d'écoute libre. Ce que j'avais fait ne marchait pas car j'avais mi :
ServerSocket server = new ServerSocket();
au lieu de ServerSocket server = new ServerSocket(0);
Quand je demandais le port auquel il était attribué il me disai -1 ...
Bref c'est la solution 2) que je cherchais.

Merci