C# - 要关闭NetworkStream,请调用stream.Close或socket.Shutdown?

Nic*_*rez 9 c# sockets networkstream stream

我想知道是否有人知道处理使用Socket对象和NetworkStream对象的类的最佳方法?有问题的类有一个NetworkStream实例和一个用于创建NetworkStream的Socket实例.

this.socket = new Socket(
                           AddressFamily.InterNetwork,
                           SocketType.Stream,
                           ProtocolType.Tcp)
                        {
                            ReceiveBufferSize = 65536,
                            SendBufferSize = 150
                        };

this.socket.Connect(
                        new IPEndPoint(                                                                   
                              IPAddress.Parse(
                                          Properties.Settings.Default.MpsServer2),
                                          Properties.Settings.Default.MpsPort2));

this.stream = new NetworkStream(
                         this.socket, true);
Run Code Online (Sandbox Code Playgroud)

在我的Dispose方法中,我应该这样做吗?

this.stream.Close();
this.socket.Shutdown(SocketShutdown.Both);
this.socket.Close();
Run Code Online (Sandbox Code Playgroud)

所有这些都是必要的还是过度杀伤?

Sem*_*nen 2

Socket不处置关联的NetworkStream. 我也肯定启动了反射器。(一个分析 .NET dll 和 .NET 库的工具。很棒的工具。你必须在月底之前下载免费版本,然后才能完全商业化)。

然而,根据MDSN 文档和反射器,流将关闭套接字,但前提是它拥有套接字的所有权。您可以将其设置为重载构造函数中的第二个参数。

Shutdown无论如何你都必须调用,因为 if会刷新数据。如果不这样做,您可能会丢失数据。