如何完全断开TCPClient?(印)

Ker*_*mia 13 delphi indy

当我的Tcpclient工作时,使用以下代码:

TCPClient.Disconnect;
TCPClient.Connect;
Run Code Online (Sandbox Code Playgroud)

我得到"提出异常类EIdAlreadyConnected与消息'已连接.'." 错误仍然(然而,它之前已断开连接).

那么,我怎么能完全断开它呢?

谢谢

小智 18

在indy 10使用你必须确保inputbuffer为空.

if idTcpClient.connected then
begin
 idTcpClient.IOHandler.InputBuffer.clear;
 idTcpClient.Disconnect;
end;
Run Code Online (Sandbox Code Playgroud)

  • 详细说明,Connected()方法认为连接仍然是打开的,即使物理套接字已经关闭,如果InputBuffer中仍有待处理的未读数据,可以满足读取请求而不返回套接字.这是设计的.通常,只有在读取了连接必须提供的所有数据后才能断开套接字.如果您过早断开连接,则必须通过清除InputBuffer手动清除任何已接收但未读取的数据. (8认同)
  • 在断开连接后,你不应该清除缓冲区*吗?因为假设它在清除的时间和断开连接的时间之间接收了一些数据? (2认同)