Pergunta

Eu preciso conectar-se a um dispositivo na rede local, usando uma conexão TCP / IP. Quando eu uso um TIDTCPClient, todos funcionam bem, exceto uma coisa:

Se a conexão não estiver disponível, demora cerca de 18-20 segundos antes de obter um tempo limite. A propriedade ConnectTimeout não tem efeito, não importa quais valores estabelecemos. Sempre leva a mesma quantidade de tempo antes de um tempo limite.

esta resposta menciona longos tempos de atraso para um tempo limite, e eu sou Perguntando-se se está relacionado aos componentes da Indy?

Eu tenho que descobrir se a conexão não pode ser estabelecida muito rapidamente, digamos dentro de 1 segundo no máximo.

Existe uma maneira de fazer isso usando indy, ou preciso usar componentes diferentes / uma abordagem diferente?

(Estou usando a versão Indy 10 que enviada com Delphi 2009)

editar :
Eu segui as instruções para atualizar indy para a versão mais recente em Este post .

Ainda é o mesmo, agora é consistentemente 22 segundos até TCPClient.Connect retorna quando não há conexão. ConnectTimeout e / ou readtomout parecem não ter influência sobre isso.

Outras dicas

ConnectTimeout funciona corretamente para 2010 e XE.Talvez você possa atualizar sua versão indy para o mais recente (seu livre).Eu tenho uma função que faz "cheque rápido" se conecta, apenas para verificar a disponibilidade do dispositivo e esses tempos limite são 5 segundos sem problemas (em 2010 e XE).

Com um timeout de conexão de cliente TCP padrão (não especificamente definido) e um tempo limite de leitura de 1 segundo, usando o Delphi 2010 e a última versão Indy, uma conexão local (usando localhost como o nome do host) em 1 segundo.Então, isso definitivamente não é um problema delphi / indy.BTW, isso me dá um EidSocketError ("Conexão de" erro de soquete # 10061 recusada ").

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top