当客户端异常断网,服务器端如何监听客户端是否已经失去连接! ( 积分: 36 )

  • 主题发起人 主题发起人 djwdz
  • 开始时间 开始时间
D

djwdz

Unregistered / Unconfirmed
GUEST, unregistred user!
我服务用TIdTCPServer,客户端用TIdTCPClient,当客户端正常断开,或是网络连接正常,只是程序异常断开始,都可以触发服务器的disconnection事件,但是如果是突然拔掉网线,那么服务器端的disconnection事件就不能出发,那个客户端的连接线程仍然存在,只要在服务器中一旦用到这个其实已经没有用的线程进行操作时就会产生异常,从而导致服务器死掉,或是出错,请大家帮忙解决一下,有什么好办法能时时在服务器监听无效的客户端的连接线程,然后我可以对这些线程进行处理,避免产生异常导致服务器死掉!
小弟分数已经不多了,全部拿出,如果问题解决,小弟日后感激不尽!有分后,必定加贴加分!急!急!急!
 
我服务用TIdTCPServer,客户端用TIdTCPClient,当客户端正常断开,或是网络连接正常,只是程序异常断开始,都可以触发服务器的disconnection事件,但是如果是突然拔掉网线,那么服务器端的disconnection事件就不能出发,那个客户端的连接线程仍然存在,只要在服务器中一旦用到这个其实已经没有用的线程进行操作时就会产生异常,从而导致服务器死掉,或是出错,请大家帮忙解决一下,有什么好办法能时时在服务器监听无效的客户端的连接线程,然后我可以对这些线程进行处理,避免产生异常导致服务器死掉!
小弟分数已经不多了,全部拿出,如果问题解决,小弟日后感激不尽!有分后,必定加贴加分!急!急!急!
 
是不是分太少了,大家不愿意回答阿
请大家帮帮忙吗?无私一下吧
 
我也想知道
 
服务端每隔一段时间就去检查一下客户端,如果无法连接就disconnect
 
我的做法就是jetbo说的.

对于客户端异常断开,服务端每隔一段时间就去检查一下客户端是否有数据发来,也就是所谓的心跳检测.我现在的系统就是这样做的.很稳定.
 
很简单,c-s之间必须定时保持数据通信,如果没有其他数据通信那就需要自己写个链路检测(例如每30秒向服务器发送一个链路检测信息),服务端收到客户端上行的任何类型数据,就更新该socket相应的一个时间戳属性(自己加的)为当前时间戳;另外开一个线程PurifyThrd,定时检测所有socket,发现有某个socket的最后通信时间戳和当前时间的差相差超过n秒(例如300秒),就认为该socket已经意外断开了,然后CancelIo()并CloseSocket()该socket就行了
 
接受建议谢谢
 
后退
顶部