2011-02-15 33 views
0

我需要使用TCP/IP連接連接到本地網絡上的設備。 當我使用TIdTCPClient時,除了一件事以外,一切正常:是適合本地TCP/IP連接的Indy TIdTCPClient?

如果連接不可用,則需要大約18-20秒纔會出現超時。 無論我設置了什麼值,ConnectTimeout屬性都不起作用。在超時之前,它總是需要相同的時間。

This answer提到超時的延遲時間,我想知道這是否與Indy組件有關?

我必須找出連接是否不能很快建立,比方說最多在1秒內。

有沒有辦法使用Indy做到這一點,還是我需要使用不同的組件/不同的方法?

(我使用德爾福2009年附帶的印版本10)

編輯
我按照說明印地升級到最新版本this post

仍然一樣,現在一直持續22秒,直到TCPClient.Connect在沒有連接時返回。 ConnectTimeout和/或ReadTimeout對此似乎沒有影響。

+0

如果你想要一個快速無阻塞的delphi套接字解決方案,請試試ICS - http://www.overbyte.be/frame_index.html – 2011-02-16 02:43:38

+0

你會得到什麼錯誤? – Misha 2011-02-16 22:13:19

+0

@Misha:如預期的那樣,我得到連接超時,但我不能等待20秒纔會發生這種情況。如果有連接問題,我需要馬上知道。 – Holgerwa 2011-02-17 08:01:48

回答

1

我有同樣的確切問題。檢出this StackOverflow post

總之,由於Indy線程被阻塞,您將需要進行線程化處理。然後在主應用程序中創建一個計時器,如果它在給定的時間內沒有完成它應該做的事情,它將終止該線程。

我執行後,這工作很好。

5

ConnectTimeout對於2010和XE都能正常工作。也許你可以更新你的Indy版本到最新版本(免費版)。我有一個「快速檢查」連接的功能,只是爲了檢查設備的可用性,這些超時是5秒沒有問題(在2010和XE中)。

2

使用Delphi 2010和最新的Indy版本,默認的TCP客戶端連接超時(未明確設置)和讀取超時1秒,本地連接(使用本地主機作爲主機名)在1秒內超時。所以這絕對不是Delphi/Indy的問題。順便說一句,這給了我一個EIdSocketError(「套接字錯誤#10061連接被拒絕」)。