Indy TIdTCPClient是否适合本地TCP / IP连接?

时间:2011-02-15 15:27:24

标签: delphi delphi-2009 indy indy10

我需要使用TCP / IP连接连接到本地网络上的设备。 当我使用TIdTCPClient时,一切都运行良好,除了一件事:

如果连接不可用,我需要大约18-20秒才能获得超时。 无论我设置什么值,ConnectTimeout属性都没有效果。在超时之前总是花费相同的时间。

This answer提到超时的延迟时间很长,我想知道这是否与Indy组件有关?

我必须找出连接是否无法很快建立,比如说最多只能在1秒内完成。

使用Indy有没有办法做到这一点,还是需要使用不同的组件/不同的方法?

(我使用的是Delphi 2009附带的Indy 10版本)

修改
我按照说明将Indy升级到this post中的最新版本。

仍然相同,它现在始终需要22秒,直到TCPClient.Connect在没有连接时返回。 ConnectTimeout和/或ReadTimeout似乎对此没有影响。

3 个答案:

答案 0 :(得分:5)

ConnectTimeout适用于2010和XE。也许您可以将Indy版本更新为最新版本(免费版)。我有一个“快速检查”连接的功能,只是为了检查设备的可用性,这些超时是5秒没有问题(2010年和XE)。

答案 1 :(得分:2)

使用默认的TCP客户端连接超时(未特别设置)和读取超时1秒,使用Delphi 2010和最新的Indy版本,本地连接(使用localhost作为主机名)在1秒内超时。所以这绝对不是Delphi / Indy问题。顺便说一句,这给了我一个EIdSocketError("套接字错误#10061连接被拒绝")。

答案 2 :(得分:1)

我遇到了同样的问题。查看this StackOverflow post

简而言之,因为Indy线程正在阻塞,所以您需要进行线程化处理。然后在主应用程序中创建一个计时器,如果它没有在给定的时间内完成它应该做的事情,它将终止该线程。

我实施后,这很有效。