Подтвердить что ты не робот

Как отключиться от tcp-сокета в NodeJs

Я подключаюсь к серверу сокетов в NodeJs, используя эту команду:

client = net.createConnection()

Как я могу правильно отключиться от сервера?

Я пробовал client.end() и даже client.destroy()

но когда я проверяю состояние подключения с помощью netstat, он показывает, что соединение находится в состоянии FIN_WAIT2.

Как я могу закрыть и уничтожить соединение вообще?

4b9b3361

Ответ 2

Это последовательность завершения соединения TCP по умолчанию,

enter image description here

Вызвав client.end(), узел js отправит пакет FIN на сервер, и сервер ответит клиентом пакетом FIN, чтобы принять завершение сокета.

Что касается документации по nodejs, то, что делает socket.end, это

Полузакрыть розетку. то есть он отправляет пакет FIN. Возможно, сервер все еще отправит некоторые данные.

Когда пакет FIN получен, соединение с сервером от клиента автоматически закрывается, и запускается socket.on('close', .. ), а ACK отправляется обратно.

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

Но при вызове socket.destroy клиентское соединение будет прервано без принудительного получения пакета FIN, и рекомендуется избегать этого, если это возможно.

Справка:

Ответ 3

У меня установлена версия nodejs 11.15.0 под GNU/Linux; единственный способ отключить telnet-подобный клиент в этой конфигурации - вызвать

socket.destroy()

Других методов в socket просто больше не существует (например: close() или disconnect()); также испускание событий close или end не работает.

Ответ 4

То, что вы хотите, это client.close(), клиент продолжает жить для будущих подключений. Если вы больше не хотите использовать соединение в ближайшем будущем, вы можете его уничтожить(). Я должен сказать, по моему скромному мнению, семантика не так согласована в net.Socket. Вы подключаете() к Socket, а наоборот - close(). open() Сокет будет более подходящим. client-end() отправляет фин-пакет на сервер