Indy TIdTCPClient ConnectTimout无法正常工作

时间:2016-12-28 14:35:31

标签: sockets delphi tcpclient indy connection-timeout

我有一个TIdTCPClient,它试图连接到不在线的主机。

更新
在深入了解WINSOCK2之后,这似乎确实是一个问题,这取决于您的操作系统。也许将来版本会有修复。 (有关详细信息,请参阅此问题的评论)

设定:

  • Delphi 10 Seattle
  • Windows 7 64位
  • Indy 10.6.2.5311

ConnectTimeout设置为5000毫秒,所以我希望在5秒后至少获得一个ConnectTimeout。但是在我当前的机器上接收超时需要20秒。

到目前为止,我看到ConnectionTimeout已正确处理,但在 TIdIOHandlerStack.ConnectClient 上,线程上有 WaitFor ,执行实际的连接尝试。 我认为这会导致延迟连接超时,但我不知道我能做些什么。任何想法?

代码:

procedure TForm1.btn1Click(Sender: TObject);
begin
  try
    Self.mmo1.Lines.Add(TimeToStr(now));
    Self.idtcpclnt1.Host := '192.148.89.112';
    Self.idtcpclnt1.Port := 9200;
    Self.idtcpclnt1.Connect;
  except on E: Exception do
    Self.mmo1.Lines.Add(TimeToStr(now)+ ' : '+E.Message);
  end;
end;

procedure TForm1.idtcpclnt1Status(ASender: TObject; const AStatus: TIdStatus;
    const AStatusText: string);
begin
  Self.mmo1.Lines.Add(TimeToStr(now)+ ' : ' +AStatusText);
end;

此代码的结果:

image

1 个答案:

答案 0 :(得分:-2)

如果目标是防火墙并且启用了防火墙,则必须禁用防火墙。

您必须打开相应的端口,而不是禁用防火墙。但是,风险

因为它变得更强渗透性。( Hack