Я занимаюсь простым упражнением для понимания сокетов и серверных сокетов. При myServerSocket = new ServerSocket(0)
порт случайно назначается гнезду. Я хочу знать, как я могу настроить клиент для подключения к этому порту. Как клиент находит порт прослушивания, если он случайно назначен?Назначение порта Java Client/Server
Вот это фрагменты кода из обоих серверов и клиентских классов:
Сервер:
public static void main(String[] args) {
try {
// First we create a server socket and bind it to a random port.
ServerSocket myServerSocket = new ServerSocket(0);
// wait for an incoming connection...
System.out.println("Server is waiting for an incoming connection on host="
+ InetAddress.getLocalHost().getCanonicalHostName()
+ " port=" + myServerSocket.getLocalPort());
Socket skt = myServerSocket.accept();
Клиент:
public static void main(String[] args) {
// create a socket and bind it to the host/port server is listening on.
String host;
int port;
if(args.length==0) {
host = "localhost";
port = 9999;
} else {
host = args[0];
String portStr = args[1];
try {
port = Integer.parseInt(portStr);
} catch (NumberFormatException nfe) {
System.out.println("Whoops, invalid port number. Will default to 9999");
port = 9999;
}
}
Клиент должен знать точный номер порта, где сервер слушает –
. Как было сказано выше.В противном случае сканирование портов сканируется, но я предполагаю, что для прохождения через все порты потребуется много времени, если не используется какая-либо эвристика (или минимальный диапазон [например, диапазон] функции случайного порта затягивается). – noumenal