Si le port utilisé ne vous dérange pas, spécifiez un port de 0 au constructeur ServerSocket et il écoutera sur n'importe quel port libre.
ServerSocket s = new ServerSocket(0);
System.out.println("listening on port: " + s.getLocalPort());
Si vous souhaitez utiliser un ensemble spécifique de ports, le moyen le plus simple est probablement de les parcourir jusqu'à ce que l'un d'entre eux fonctionne. Quelque chose comme ça:
public ServerSocket create(int[] ports) throws IOException {
for (int port : ports) {
try {
return new ServerSocket(port);
} catch (IOException ex) {
continue;
}
}
throw new IOException("no free port found");
}
Pourrait être utilisé comme ceci:
try {
ServerSocket s = create(new int[] { 3843, 4584, 4843 });
System.out.println("listening on port: " + s.getLocalPort());
} catch (IOException ex) {
System.err.println("no available ports");
}