我使用以下命令连接到NodeJs中的套接字服务器:
client = net.createConnection()
如何才能正确断开与服务器的连接?
我尝试了client.end()
甚至client.destroy()
但是当我使用netstat检查连接状态时,它显示连接处于FIN_WAIT2状态。
如何完全关闭和销毁连接?
答案 0 :(得分:22)
net.createConnection()
返回一个Socket对象。 client.destroy()
是你想要做的。
来源:http://nodejs.org/docs/latest/api/net.html#socket.destroy
答案 1 :(得分:6)
这是默认的TCP连接终止顺序,
节点js通过调用client.end()
将FIN数据包发送到服务器,服务器将以FIN数据包响应到客户端以接受套接字终止。
根据nodejs文档,socket.end
的作用是
半关闭插座。即,它发送FIN数据包。服务器可能仍会发送一些数据。
收到FIN数据包后,会自动关闭从客户端到服务器的连接,并触发socket.on('close', .. )
,并发送回ACK。
因此,通过服务器和客户端双方的同意来终止连接,以便服务器能够发送在关闭连接之前可能需要的数据。
但是,当调用socket.destroy
时,客户端连接将被破坏,而不会强行接收FIN数据包,这是避免这种情况的最佳做法。
参考:
答案 2 :(得分:1)
我在GNU / Linux下安装了nodejs 11.15.0版;在这种配置下,断开类似于telnet的客户端的唯一方法是调用
socket.destroy()
socket
上的其他方法根本不存在(例如:close()
或disconnect()
);也会发出close
或end
事件。
答案 3 :(得分:-1)
你想要的是client.close(),客户端保持活着以便将来连接。如果你不想在不久的将来再使用连接,你可以销毁()它。我必须以谦虚的观点说,语义在net.Socket中并不一致。你连接()一个Socket而另一个是close()。 open()一个Socket会更合适。 client-end()向服务器发送fin数据包