【问题标题】:How to catch telnet disconnection (Delphi Indy telnet)?如何捕获 telnet 断开连接(Delphi Indy telnet)?
【发布时间】:2019-07-05 01:38:04
【问题描述】:

我在 Delphi 程序中使用 Indy telnet 客户端组件。 现在我需要捕获 telnet 断开连接(例如,当其他一些程序连接到同一主机时,我的连接中断了)。 怎么抓?

【问题讨论】:

标签: delphi telnet indy


【解决方案1】:

您可以使用OnStatus 事件,检查hsDisconnected 状态。

此时,TIdTelnet 在连接意外关闭时不会触发OnDisconnectOnStatus 事件。这是一个已知问题,在 Indy 的问题跟踪器中有一个未解决的问题:

#118: TIdTelnet needs to trigger OnDisconnect or OnStatus when disconnected

在解决此问题之前,您必须修改TIdTelnet 的源代码以挂钩到其内部读取线程,或者至少为其分配OnTerminate 处理程序,以检测它何时停止运行。

【讨论】:

  • 我已经尝试过了。没有成功。因为不是正常断线,所以是错误断线。
  • @Supply 在OnStatus 事件期间,连接是否正常关闭或异常丢失。如果不是,我将不得不调查一下
  • 当连接正常关闭时(另一个应用程序连接在同一个 telnet 端口上)我的应用程序显示异常套接字错误 10054 对等方重置连接。我添加了以下代码: procedure TForm1.IdTelnet1Status(ASender: TObject; const AStatus: TIdStatus; const AStatusText: string); begin if AStatus = hsDisconnected then Begin try if idtelnet1.Connected = False then idtelnet1.Connect except end;结束;没有反应
  • @Supply 这不是一个优雅的断开连接,并且预计会出现异常,但我希望 Indy 能够更好地报告它。就像我说的,我必须调查一下。
猜你喜欢
  • 2020-05-04
  • 2022-05-24
  • 2015-03-28
  • 2011-05-30
  • 2014-09-10
  • 1970-01-01
  • 2020-10-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多