如何断开NodeJs中的tcp套接字

时间:2012-02-08 10:32:56

标签: javascript sockets node.js tcpsocket

我使用以下命令连接到NodeJs中的套接字服务器:

client = net.createConnection()

如何才能正确断开与服务器的连接?

我尝试了client.end()甚至client.destroy()

但是当我使用netstat检查连接状态时,它显示连接处于FIN_WAIT2状态。

如何完全关闭和销毁连接?

4 个答案:

答案 0 :(得分:22)

net.createConnection()返回一个Socket对象。 client.destroy()是你想要做的。

来源:http://nodejs.org/docs/latest/api/net.html#socket.destroy

答案 1 :(得分:6)

这是默认的TCP连接终止顺序,

enter image description here

节点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());也会发出closeend事件。

答案 3 :(得分:-1)

你想要的是client.close(),客户端保持活着以便将来连接。如果你不想在不久的将来再使用连接,你可以销毁()它。我必须以谦虚的观点说,语义在net.Socket中并不一致。你连接()一个Socket而另一个是close()。 open()一个Socket会更合适。 client-end()向服务器发送fin数据包