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

Messages postés
206
Date d'inscription
samedi 29 octobre 2005
Dernière intervention
7 mars 2012
- - Dernière réponse : dmk04
Messages postés
206
Date d'inscription
samedi 29 octobre 2005
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
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
Messages postés
20
Date d'inscription
vendredi 3 novembre 2000
Dernière intervention
13 décembre 2010
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 97 internautes nous ont dit merci ce mois-ci

Commenter la réponse de eddyger
Messages postés
206
Date d'inscription
samedi 29 octobre 2005
Dernière intervention
7 mars 2012
0
Merci
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
Commenter la réponse de dmk04

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.