【问题标题】:Is it possible to terminate a TCPClient immediately?是否可以立即终止 TCPClient?
【发布时间】:2011-03-24 14:56:17
【问题描述】:

我的应用使用 TidTCPClient 向服务器发送数据。服务器使用 TidTCPServer。一切正常,我现在正在尝试处理意外情况。

当我断开服务器和客户端之间的网线,然后尝试关闭客户端时,它等待了很长时间,直到它最终关闭:

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

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

有没有办法立即终止 TCPClient,不管它当时在做什么?

【问题讨论】:

    标签: delphi delphi-2009 indy10


    【解决方案1】:

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

    在任何情况下,在断开/释放TIdTCPClient 时,套接字没有理由导致这种挂起,除非您弄乱了套接字的 LINGER 选项。所以我不得不首先怀疑你自己的代码有问题。您使用的是哪个版本的 Indy?你有分配给TIdTCPClient 的任何事件处理程序吗?您是否尝试过在调试器中单步执行 TIdTCPClient 的析构函数以查看实际发生的情况?

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 断开连接没有超时。
      猜你喜欢
      • 1970-01-01
      • 2011-10-23
      • 2014-08-02
      • 1970-01-01
      • 2023-01-04
      • 1970-01-01
      • 2010-12-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多