Domanda

Ho bisogno di connettersi a un dispositivo sulla rete locale, utilizzando una connessione TCP / IP. Quando uso un tidtcpclient, tutto funziona bene, tranne una cosa:

Se la connessione non è disponibile, ci vogliono circa 18-20 secondi prima di ottenere un timeout. La proprietà ConnectTimeout non ha alcun effetto, indipendentemente dai valori che ho impostato. Prende sempre la stessa quantità di tempo prima di un timeout.

Questa risposta menziona tempi di ritardo lunghi per un timeout, e io sono chiedendo se è correlato ai componenti Indy?

Devo scoprire se la connessione non può essere stabilita molto rapidamente, diciamo almeno entro 1 secondo al massimo.

C'è un modo per farlo usando Indy, o devo usare diversi componenti / un approccio diverso?

(Sto usando la versione indy 10 che spedita con Delphi 2009)

Modifica :
Ho seguito le istruzioni per aggiornare Indy all'ultima versione in Questo post .

Ancora lo stesso, ora richiede costantemente 22 secondi fino a quando TCPClient.Connect torna quando non c'è alcuna connessione. ConnectTimeout e / o lettura sembrano non avere alcuna influenza su questo.

Altri suggerimenti

ConnectTimeout funziona correttamente per il 2010 e Xe.Forse puoi aggiornare la tua versione INDY al più recente (è gratuito).Ho una funzione che fa "Quick Check" si collega, solo per verificare la disponibilità del dispositivo e quei timeout sono 5 secondi senza problemi (sia nel 2010 che in XE).

Con un timeout di connessione client TCP predefinito (non specificamente impostato) e un timeout di lettura di 1 secondo, utilizzando Delphi 2010 e la versione INDY più recente, una connessione locale (utilizzando localHost come nome host) tempi in 1 secondo.Quindi questo non è sicuramente un problema Delphi / Indy.BTW, questo mi dà un eidsocketError ("Errore socket # 10061 Connection ha rifiutato").

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top