2011-04-04 115 views
1

在客户端服务器应用程序中,客户端连接到服务器,现在如果客户端断开连接,那么我希望它必须在服务器上触发事件,告知它已断开连接。我可以使用计时器或一些循环和一个不同的线程来实现这一点。该线程不断检查客户端的连接。这就对了。但它就像投票机制。我想写一些中断机制。我的意思是我不想使用计时器或循环。当客户端意愿或不愿意从客户端或服务器端断开连接时,我的服务器应通知客户端断开连接。请不要告诉如何制作自定义事件。如何跟踪客户端已断开连接?

(我也问过同样的问题,几分钟前,但无法找到正确的响应和问题是由论坛关闭...)

+1

这里有很多优秀的女士/女孩,最好不要将他们排除在回答之外:) – 2011-04-04 10:07:08

+0

哎呀也 - 你没有标记你的问题,指定你正在使用的技术。 C#/ Java/ASP.NET /套接字/远程处理/网络?试着问*特定的问题,并且包括你已经尝试过的和出了什么问题。 – 2011-04-04 10:08:21

+0

你在哪个班级处理连接? – 2011-04-04 10:12:57

回答

1

目前尚不清楚是否你在谈论ASP.NET(或其他网站的东西),使用套接字进行直接通信,远程处理,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; 
    } 
} 

基本上,当客户端断开的socket方法,将抛出SocketException,你可以检查原因异常对象的SocketError财产。这将是其中之一:

http://msdn.microsoft.com/en-us/library/system.net.sockets.socketerror.aspx

这些结果表明已断开的客户端:ConnectionReset,NotConnected ......但你几乎必须注销整个插座,如果你得到任何SocketException

+0

使用套接字。其实我不想让服务器忙于执行定时器或循环来跟踪客户端连接。所以需要一些只有在客户端断开时才执行的东西。例如:在你的房子里,你不会一次又一次地检查你的门是否有人在场。当任何人在那里都很简单,他/她必须敲门,然后才必须打开门。同样,如果有人从你家离开,他/她会通知你我要离开。这是不公平的,一次又一次地看着你的家人在房间里的存在。 – himanshu 2011-04-04 10:28:10

+0

这就是我需要的。 – himanshu 2011-04-04 10:28:52

+0

不幸的是,没有'断线'事件,请看我的答案。 – 2011-04-04 10:36:14

相关问题