繁体   English   中英

无法访问已处置的 object。 Sockets C#

[英]Cannot access a disposed object. Sockets C#

我使用 sockets,当我尝试关闭套接字时,我得到一个

ObjectDisposedException:无法访问已处置的 object Object 名称:'System.Net.Sockets.Socket'。

例外。

        socket.Close();
        socket.Shutdown(SocketShutdown.Both);  <- exception

为什么会这样? 为什么垃圾收集器会清理它?

Socket.Close文档的备注部分告诉你

对于面向连接的协议,建议您在调用Close方法之前调用Shutdown 这确保了在连接的套接字关闭之前,所有数据都在连接的套接字上发送和接收。

所以,你应该在Close之前调用Shutdown ,而不是之后

socket.Shutdown(SocketShutdown.Both);
socket.Close();        

在许多情况下, Close实际上是Dispose的同义词。 对于套接字,您应该在Close / Dispose之前使用Shutdown (或根本不使用)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM