是否可以立即终止TCPClient?
问题描述:
我的应用程序使用TidTCPClient将数据发送到服务器。服务器使用TidTCPServer。所有工作正常,我现在正在尝试处理意外情况。是否可以立即终止TCPClient?
当我断开服务器和客户端之间的网络电缆,然后尝试关闭客户端,它会等待很长一段时间,直到最后关闭:
TCPClient.IOHandler.InputBuffer.Clear;
TCPClient.Disconnect;
TCPClient.Free;
TCPClient.Free的地方是它等待的时间。这有时候是30秒,有时甚至更长。
有没有办法立即终止一个TCPClient,不管它在那个时候做什么?
答
在调用Disconnect()
之后(而不是之前),您应该清除InputBuffer
。
在任何情况下,在断开/释放TIdTCPClient
时,没有任何理由让套接字引起这种挂起,除非您已经弄乱了套接字的LINGER选项。所以我不得不怀疑你自己的代码首先是错误的。你使用哪个版本的Indy?你有任何事件处理程序分配到TIdTCPClient
?你有没有试过在调试器中通过TIdTCPClient的析构函数来查看真正发生了什么?
答
它可能会等待超时。查看组件的属性以降低超时值
没有超时断开连接。 – 2011-03-25 01:47:13