什么是关闭TCP连接的正确方法

Kor*_*tak 8 c# tcp networkstream

我有一个TcpClient对象,它使用其底层NetworkStream.Write()将一些数据发送到服务器.因此,我有:

TcpClient server = new TcpClient(serverName, 50001);

/* ... */

NetworkStream stream = server.GetStream();
Run Code Online (Sandbox Code Playgroud)

现在,按下按钮时,连接应该关闭.什么是关闭连接的正确方法?MSDN文档说关闭TcpClient(使用.Close())实际上并不关闭套接字,只关闭TcpClient资源(这至少是我理解文档的方式).

那么,下一个代码会正确关闭连接吗?

stream.Close();
server.Close();
Run Code Online (Sandbox Code Playgroud)

这是否足够,或者我应该首先检查(以某种方式)是否可以关闭流(或服务器)(如果连接是半开的或某些东西)......

更重要的是,NetworkStream.Close()MSDN文档声明它释放资源(甚至是套接字),因此关闭流可能就足够了,因为我在此之后阻止使用TcpClient.

什么是正确的方法?

Jor*_*ren 6

正如文档所说:

调用此方法最终将导致关联的Socket关闭,并且还将关闭用于发送和接收数据的关联NetworkStream(如果已创建).

所以,server.Close();也就足够了.

首先关闭NetworkStream永远不会受到伤害.

顺便说一下,如果您恰好只在一个方法中使用TcpClient,请将其包装在一个using( )语句中,以便您确定Dispose()(相当于Close())在其上调用它,即使抛出异常等.