是否可以立即终止TCPClient?

问题描述:

我的应用程序使用TidTCPClient将数据发送到服务器。服务器使用TidTCPServer。所有工作正常,我现在正在尝试处理意外情况。是否可以立即终止TCPClient?

当我断开服务器和客户端之间的网络电缆,然后尝试关闭客户端,它会等待很长一段时间,直到最后关闭:

TCPClient.IOHandler.InputBuffer.Clear; 
TCPClient.Disconnect; 
TCPClient.Free; 

TCPClient.Free的地方是它等待的时间。这有时候是30秒,有时甚至更长。

有没有办法立即终止一个TCPClient,不管它在那个时候做什么?

在调用Disconnect()之后(而不是之前),您应该清除InputBuffer

在任何情况下,在断开/释放TIdTCPClient时,没有任何理由让套接字引起这种挂起,除非您已经弄乱了套接字的LINGER选项。所以我不得不怀疑你自己的代码首先是错误的。你使用哪个版本的Indy?你有任何事件处理程序分配到TIdTCPClient?你有没有试过在调试器中通过TIdTCPClient的析构函数来查看真正发生了什么?

它可能会等待超时。查看组件的属性以降低超时值

+1

没有超时断开连接。 – 2011-03-25 01:47:13