日期:2014-05-19  浏览次数:20678 次

TCP通讯服务器如何检测失效的客户端?
如果客户端禁用网络或者拔网线,服务器一切如常,在线列表也会多一个失效的客户端。如果客户端是结束进程或者明确关闭,服务器会收到空信息或者捕获异常,可以处理。
现在想请问第一种情况如何处理,就是加一些特殊处理,可以及时释放连接和相关资源,把失效的连接处理掉

我的做法是开一个维护线程,某个Socket多少分钟内没有向服务器发任何数据(需要记录每个客户端最后一次向服务器发送数据的时间)的话,就把它断掉,释放资源。
这样可以达到目的,但维护线程需要占用服务器资源,并且遍历时要对在线列表加锁,很浪费资源

请教各位朋友,有没有更好的做法呢?

------解决方案--------------------
http://blog.csdn.net/wzd24/archive/2007/04/13/1564112.aspx

看看我这篇文章,讲的就是这个。
------解决方案--------------------
有,我的做法是在接受回调里捕捉异常
catch (SocketException ex)
{
if (ex.ErrorCode == 10054)
{
CloseSocket(cl);
}
}
可以在这里面处理
------解决方案--------------------
up