Как класс 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
Ресурсы:
Операционная система, в которой работает сервер, использует номер удаленного порта, чтобы различать различные соединения с сервером.