java ServerSocket использует один и тот же порт, тогда как клиент использует другой

#java #sockets #network-programming #port #serversocket

#java #сокеты #сетевое программирование #порт #serversocket

Вопрос:

в каждой программе сокета Java у нас есть Serversocket и клиентский сокет с номерами портов

Меня смущает механизм связи, у нас есть фиксированный номер порта для сервера, и для сервера очевидно, что он принимает соединения с одним номером порта, однако у нас разные порты от клиентов, я имею в виду, что каждый раз, когда я печатаю, он выдает мне другой номер порта

 System.out.println("caught a client : "  client.getInetAddress()  " : "  client.getPort());
  

Я хочу знать причину, по которой номер порта клиента каждый раз отличается

Спасибо

Ответ №1:

Соединение с сокетом TCP идентифицируется 4 полями: адрес источника и порт, а также адрес назначения и порт. Если бы вы использовали фиксированный порт на стороне клиента, вы не смогли бы установить другое соединение с тем же сервером и портом.

Обычно не имеет значения, какой порт выбирает клиент, если он не используется. Большинство программ предоставляют операционной системе возможность найти свободный порт.

Комментарии:

1. На самом деле это важно. Очень важно различать вновь созданное соединение сокетов.

2. @zgulser пояснил, что неважно, какой порт вы выбираете, при условии, что он бесплатный