如何完全断开TCPClient? (印)
当我的TcpClient的是工作,有了这个代码: “出现的异常类EIdAlreadyConnected有消息。 '已连接'”如何完全断开TCPClient? (印)
TCPClient.Disconnect;
TCPClient.Connect;
我得到错误仍然存在(而之前它已断开连接)。
那么,我怎样才能完全断开它?
谢谢
。
if idTcpClient.connected then
begin
idTcpClient.IOHandler.InputBuffer.clear;
idTcpClient.Disconnect;
end;
你说它是断开的,但你只给了断开命令。
网络流量需要时间,并且可能在您断开连接之前重新连接。
也许你需要监视一些连接状态或事件,等到你真的断开连接。
...或者尝试处理异常,并使用在印第安纳波利斯10,您必须确保INPUTBUFFER是空的忽略它,使用try..except
谢谢。请给我一个例子 – Kermia 2010-08-26 12:58:56
Indy不*使用异步通信,所以直觉就是当命令返回时它已经完成了它的工作。 – jpfollenius 2010-08-27 11:51:15
问题在于作业的定义。断开连接的发送,或者确认/超时,以使其完全关闭。 – 2010-08-27 13:03:41
TCPClient.IOHandler.InputBuffer.Clear;
TCPClient.IOHandler.CloseGracefully;
TCPClient.Disconnect;
谢谢,我会试试 – Kermia 2010-08-26 14:30:14
详细说明,即使物理套接字已经关闭,如果InputBuffer仍然有待处理的未读取数据可以满足读取请求,Connected()方法仍认为连接仍然处于打开状态无需返回到套接字。这是设计。通常,只有在读取了连接所需的所有数据后,才能断开套接字。如果您过早断开连接,则必须通过清除InputBuffer手动清除任何已接收但未读取的数据。 – 2010-08-26 21:03:03
谢谢Lebeau先生 – Kermia 2010-08-27 05:52:14