首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

Indy心跳法判断断线的有关问题

2012-03-09 
Indy心跳法判断断线的问题用indy9没多久,遇到一个问题就是如何判断客户端和服务器之间的连接已断,在大富翁

Indy心跳法判断断线的问题
用indy9没多久,遇到一个问题就是如何判断客户端和服务器之间的连接已断,在大富翁论坛找到一个心跳法,如下:

Delphi(Pascal) code
uses WinSock2;procedure TForm1.IdTCPServer1Connect(AThread: TIdPeerThread);type  TCP_KeepAlive = record    OnOff: Cardinal;    KeepAliveTime: Cardinal;    KeepAliveInterval: Cardinal  end;var  Val: TCP_KeepAlive;  Ret: DWord;begin  Val.OnOff:=1;  Val.KeepAliveTime:=xxx;  Val.KeepAliveInterval:=xxx;  WSAIoctl(AThread.Connection.Socket.Binding.Handle, IOC_IN or IOC_VENDOR or 4,    @Val, SizeOf(Val), nil, 0, @Ret, nil, nil)end;  


将以上代码加到TCPServer的Connect中,原文中提到“应用程序可以在TCPServer的OnException里守着就行了”,加入这个心跳检测后,客户端拔掉网线,未能够检测到SOCKET_ERROR的异常。有人用过这个方法吗,在哪里捕获断线的消息呢?还请指教!


[解决办法]
既然你用了心跳包了,那么超过一定时间不来心跳包那就说明掉线了啊。
[解决办法]
应该有短线的间隔时间
[解决办法]
Indy9的机制不清楚,但是Indy10当中还是需要CheckForDisconnect来检查的,只是有显式和隐式(隐式是指在某些读写操作当中本身的代码已经调用检测过程)

热点排行