在客户端服务器应用程序中,客户端连接到服务器,现在如果客户端断开连接,那么我希望它必须在服务器上触发事件,通知它已断开连接。我可以使用计时器或一些循环和不同的线程来实现这一点。该线程不断检查客户端的连接。这就对了。但它就像一个投票机制。我想写一些类似中断机制的东西。我的意思是我不想使用计时器或循环。当客户端自愿或不情愿地从客户端或服务器端断开连接时,我的服务器应该通知客户端已断开连接。请不要告诉我们如何制作自定义活动。
(几分钟前我问了同样的问题,但找不到正确的答案,论坛也关闭了问题......)
答案 0 :(得分:1)
目前尚不清楚您是在谈论ASP.NET(或其他Web内容),使用套接字进行直接通信,远程处理,WCF还是其他东西。请澄清你是否可以。
您似乎在谈论民意调查与事件驱动系统。确切的实现和细节取决于上面的问题。 “请不要告诉如何制作自定义事件”没有多大意义:您似乎不想轮询,根据具体情况,您可能需要创建自定义事件。
根据您使用套接字的事实进行更新:
没有被触发的事件,使用套接字只会导致读取,写入等调用失败并显示SocketException
。
请参阅此处了解更多信息:
Instantly detect client disconnection from server socket
你可以为此创建自己的事件,如果你的套接字是在另一个线程中处理的,例如,你的线程方法看起来像这样:
bool running = true;
while (running)
{
try
{
// do socket work here - read/write/etc
}
catch (SocketException)
{
// something happened, e.g. client disconnected. stop thread running.
// you could fire your 'Disconnected' event here.
running = false;
}
}
基本上,当客户端断开连接时,套接字方法将抛出SocketException
,并且您可以检查异常对象的SocketError
属性。它将是以下之一:
http://msdn.microsoft.com/en-us/library/system.net.sockets.socketerror.aspx
这些结果表明一个断开连接的客户端:ConnectionReset,NotConnected ...但如果你得到任何SocketException
,你几乎必须注销整个套接字。