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

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

Merci eddyger 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de eddyger
dmk04 206 Messages postés samedi 29 octobre 2005Date d'inscription 7 mars 2012 Dernière intervention - 17 févr. 2006 à 10:06
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.