Как класс serverocket обслуживает несколько клиентских соединений на одном и том же порту?

При использовании класса Socket один устанавливает TCP-соединение с сервером на каком-либо порту, но на сервере ServerSocket способен обрабатывать несколько клиентских соединений для каждого запроса на прием и делегировать его потоку на сервер запроса. Но как класс ServerSocket может принимать несколько подключений tcp на одном и том же порту.

Означает ли это, что до ОС можно решить, сколько подключений разрешено или каков максимальный резерв, и может ли это контролироваться приложениями поверх ОС (я имею в виду, что java ограничена максимальным отставанием, поддерживаемым ОС ) и существует ли какая-либо конфиденциальность для соединений backlog в спецификации TCP?

Лучшие регаты,
Кешав

Ответ 1

TCP-соединение определяется уникальным набором (исходный IP-адрес, порт источника, dest IP, dest-порт). Поскольку сервер привязывается к определенному порту, он определяет две из этих 4 переменных. Пока клиенты все из разных IP-адресов и/или разных портов, это не будет проблемой.

И да, ОС может контролировать, сколько всего подключений разрешено, и ваша программа может еще больше ограничить ее.

Ответ 2

Он обслуживает несколько клиентов, и вы можете выбрать, сколько клиентов вы будете обрабатывать одновременно.

Соединение (ака Socket между клиентом и сервером не только идентифицируется ServerIP/ServerPort, оно идентифицируется с ClientIP/ClientPort/ServerIP/ServerPort.

Вам нужно только принимать соединения (и обычно обрабатывать их в разных потоках).


По умолчанию размер отставания равен 50, но вы можете установить его при создании ServerSocket.

new ServerSocket(21, 100); //Create a server socket with a backlog of 100

Ресурсы:

Ответ 3

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