在使用Indy中的IdTCPClient和IdTCPServer时遇到一些问题。
原来写的程序使用TClientSocket和TServerSocket处理正常
和非正常断开连接,我都是在OnDisconnect中进行相应处理,
也就是说不管是正常断开还是意外断开(比如一方意外断线)
在OnDisconncet都能正确响应,但是我发现在用Indy时好象
只有正常断开才能响应OnDisconnect中的代码,不知道是怎
么回事,用Indy怎么样才能处理非正常断开呢?

解决方案 »

  1.   

    Indy没有断开这个事件,当服务器把客户断开时,客户端并不知道。Indy是设计为每次由客户端向服务器进行查询的方式操作的。由次每次交互均由客户端发起。所以客户是否和服务器断开,必须当客户端有操作时才可以知道。对于高级一点的操作时,我个人感觉并不是很好用。好且我在看其源代码时发现其中居然有内存泄漏,虽然并不严重,只是漏一次。搞笑的是,Indy在漏内存的地方还加了注释,就是说他们是知道的, 好笑啊。如果你要用Indy的话,可以需要在客户端和服务器端定义一个Ping命令。客户端定时去查,从而确定是否被服务器断开了。