[英]C# 'Cannot access a disposed object. Object name: 'SslStream'.'
[英]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.