Свободный порт подразумевает, что это порт, который вы можете использовать. Единственные порты, которые клиент может использовать на сервере, - это порты, которые открыты на сервере.
Однако я предполагаю, что вы хотите найти неиспользуемый порт. Звучит так, будто вы пытаетесь сделать что-то, что не нужно делать, если вы делаете то, что пытаетесь делать стандартным образом.
Однако, чтобы ответить на ваш вопрос буквально.
public static int unusedPort(String hostname) throws IOException {
while (true) {
int port = (int) (65536 * Math.random());
try {
Socket s = new Socket(hostname, port);
s.close();
} catch (ConnectException e) {
return port;
} catch (IOException e) {
if (e.getMessage().contains("refused"))
return port;
throw e;
}
}
}