【发布时间】:2016-11-11 18:32:05
【问题描述】:
我有以下来自 ms 站点的源代码:http://msdn.microsoft.com/en-us/library/fx6588te.aspx
我正在尝试检测客户端何时关闭连接。
我尝试的一种方法是继续向客户端发送数据,直到出现异常。我创建了一个新线程,该线程在 onDataReceive 执行一次,但在以下位置出现错误“无法访问已处理的对象”:
m_workerSocket[socket_id].Send(bytes);
但如果我将它直接放入 onDataReceive 中,它就可以正常工作。尝试从另一个线程访问套接字时,为什么会出现此异常?
然后我找到了第二种解决方案:
static class SocketExtensions
{
public static bool IsConnected(this Socket socket)
{
try
{
return !(socket.Poll(1, SelectMode.SelectRead) && socket.Available == 0);
}
catch (SocketException) { return false; }
}
}
我也想在单独的线程中运行,以检查套接字何时关闭,但我得到了同样的错误。如果我尝试从线程执行此操作,我只会收到错误,如果我将两种解决方案都放在其中一个函数中,它们执行得很好。任何想法如何从线程中运行?
【问题讨论】:
-
检测套接字断开的唯一可靠方法是尝试从连接中读取,而不是写入。
-
谢谢!我一直收到同样的错误,任何提示我做错了什么!?!
标签: c# sockets connection