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

Résolu
dmk04 Messages postés 206 Date d'inscription samedi 29 octobre 2005 Statut Membre Dernière intervention 7 mars 2012 - 16 févr. 2006 à 23:29
dmk04 Messages postés 206 Date d'inscription samedi 29 octobre 2005 Statut Membre Dernière intervention 7 mars 2012 - 17 févr. 2006 à 10:06
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

eddyger Messages postés 20 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 13 décembre 2010
17 févr. 2006 à 08:02
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
3
dmk04 Messages postés 206 Date d'inscription samedi 29 octobre 2005 Statut Membre Dernière intervention 7 mars 2012
17 févr. 2006 à 10:06
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
0
Rejoignez-nous