Вопрос

Я использую класс Java Serversocket для серверного приложения. Участвует ли метод Accept () в рукопожатии TCP/IP?

Как я вижу в TCP/IP -дампе и из команд NetStat, клиенты устанавливают подключения с использованием метода принятия и возврата объекта сокета.

Это проблема Java, или я не понимаю семантику Accept ()?

Это было полезно?

Решение

Как правило, в UNIX, если вы отмечаете гнездо с помощью Listen (), операционная система начинает принимать соединения. Когда вы называете функцию Accept (), операционная система просто передает уже открытое соединение. Слушайте параметр, который позволяет вам указать, сколько «не введенных» открытых соединений позволяет ОС (то есть размер очереди).

Другие советы

А accept Метод не участвует в рукопожатии, как таковой. Отправка и получение сообщений реализована в стеке протоколов TCP/IP, обычно в пространстве ядра ОС.

Тем не менее accept() Метод участвует в смысле, что стек TCP/IP будет отправлять сообщение SYN-ACK, только если в некотором процессе есть accept() Вызовите Active для сокета, связанного с соответствующим IP -адресом и портом. Когда будет завершено трехстороннее рукопожатие, accept() Метод вызов завершен.

Если нет вызовов процесса accept() Со временем входящее сообщение SYN будет отброшено ядром, а удаленный клиент в конечном итоге будет пройти попытку подключения. (С другой стороны, если IP -адрес / порт не связан, то ядро, вероятно, ответит первым, и удаленный клиент увидит «отказанное соединение».)

Принять возврат только после подключения клиента и сервера (рукопожатие и т. Д.).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top