Réponse acceptée !
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