【发布时间】:2011-01-16 08:36:33
【问题描述】:
- 我正在使用
Socket(Socket A = new Socket...) 发送/接收。 - 当发生某些事情(断开连接)时,我正在尝试关闭/处理旧对象,然后实例化一个新套接字 (
A = new Socket...)(相同的主机/端口) -
connect()阶段检查正常,远程主机看到连接。 - 在尝试发送第一个字节时,我立即得到:
System.ObjectDisposedException:无法访问已处置的对象。 对象名称:'System.Net.Sockets.Socket'。 在 System.Net.Sockets.Socket.Send(字节 [] 缓冲区,Int32 偏移量,Int32 大小,SocketFlags socketFlags,SocketError&errorCode) 在 System.Net.Sockets.Socket.Send(Byte[] 缓冲区,Int32 偏移量,Int32 大小,SocketFlags socketFlags) 在 System.Net.Sockets.Socket.Send(Byte[] 缓冲区)
有什么想法吗?
try
{
CCMSocket.SetSocketOption(SocketOptionLevel.Tcp, SocketOptionName.NoDelay, true);
CCMSocket.Connect(CCMServer, CCMPort);
}
现在,当使用套接字时,catch 子句捕获SocketException,并调用reconnect 方法:
try
{
//Verify the the socket is actually disconnected
byte[] Empty = new byte[0];
CCMSocket.Send(Empty);
}
catch (Exception ex)
{
bool connected = false;
int reconnectCounter = 0;
do
{
reconnectCounter++;
Disconnect(); //<-- Just CCMSocket.Disconnect(true) in a try/catch
if (Connect(CCMServer, CCMPort)) // <-- method given above
{
connected = true;
CCMSocket.Send(LoginData); // this fails
}
} while (!connected);
}
【问题讨论】:
-
我们可以看看你的代码,看看你是如何处理你的对象的。
-
你能发布一些代码提取,听起来你使用的是相同的参考
-
你是否在任何地方使用
using阻止Socket对象?
标签: c# sockets objectdisposedexception