Socket通信中如何判断客户端已经断开(30分)

  • 主题发起人 主题发起人 caochen
  • 开始时间 开始时间
C

caochen

Unregistered / Unconfirmed
GUEST, unregistred user!
正常的断开我可以接收到客户端发来的信息,如果是非正常断开我该怎么判断?
 
定时巡检
如果几次没有回应就认为断了
有些要和其他人做的程序连接时有这种情况
他们在断开的时候不发断开消息就直接断掉了
不做点处理就出错。
 
server呼它没反应不就知啦?乱讲的,
 
对,用server呼叫,如果超时,则会产生error,就可以判断为断开了
 
可以这样做,当多个client 登录 server时记住它们的 SocketHandle,
然后通过Form1.ServerSocket1.Socket.Activeconnections.handle 来
扫描一下你记住的句柄,具体的你自己写吧
 
to quejian :
老兄:记住了句宾扫描,如何扫?如果异常关机这种非正常情况,扫描多久才能判断出一台机器
的连接是否已经短开呢?
 
to quejian :
我是用一个循环给每台保持连接的计算机发消息,不过对于上述异常情况,还是效果
不好
 
//如果异常关机这种非正常情况,扫描多久才能判断出一台机器的连接是否已经短开呢?
我试过,很快的,1 秒钟左右。
不过我认为一般来说这种判断只在传输大一些的数据量的时候才显得有必要
^^^^^^
 
如果异常关机这种非正常情况,而且对方机器不再打开,从server发出数据,是要很长时间系统才报告超时的
你的客户端应该在每隔 x 分钟发出一个特定格式的数据,叫做心跳
服务器监测到心跳,就把这次心跳时间纪录起来
服务器经常检查每个连接的上次心跳的时间,超过 x+1 分钟的,就判断他死了,终止这个连接
 
如果你用delphi的socket控件,使用异步方式,客户端有OnDisconnect服务器端有
OnClientDisconnect事件。如果异常断开,客户端会有OnError服务器端有
OnClientError事件发生。在Error事件中,强行Close事件的Socket参数传来的连接,
一切的OK拉
 
后退
顶部