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

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

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

С наилучшими пожеланиями,
Кешав

3 ответа

Решение

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

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

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

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

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


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

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

Ресурсы:

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

Другие вопросы по тегам