Pregunta

Necesito conectarme a un dispositivo en la red local, utilizando una conexión TCP / IP. Cuando uso un tidtccclient, todo funciona bien, excepto una cosa:

Si la conexión no está disponible, se tarda entre 18-20 segundos antes de obtener un tiempo de espera. La propiedad ConnectTimeout no tiene ningún efecto, sin importar los valores que establezca. Siempre toma la misma cantidad de tiempo antes de un tiempo de espera.

Esta respuesta menciona los largos tiempos de retardo por un tiempo de espera, y soy ¿Se pregunta si está relacionado con los componentes de Indy?

Tengo que averiguar si la conexión no se puede establecer muy rápidamente, digamos dentro de 1 segundo a lo sumo.

¿Hay una manera de hacerlo usando Indy, o necesito usar diferentes componentes / un enfoque diferente?

(Estoy usando la versión de Indy 10 que se envió con Delphi 2009)

editar :
Seguí las instrucciones para actualizar Indy a la última versión en esta publicación .

Todavía lo mismo, ahora toma 22 segundos hasta que TCPClient.Connect regresa cuando no hay conexión. ConnectTimeout y / o ReadTimeOut parece que no tiene ninguna influencia en esto.

Otros consejos

ConnectTimeout funciona correctamente para 2010 y XE.Tal vez pueda actualizar su versión de Indy a lo último (es gratis).Tengo una función que se conecta 'cheque rápido', solo para verificar la disponibilidad del dispositivo y esos tiempos de espera son 5 segundos sin problemas (en 2010 y XE).

Con un tiempo de espera de TCP de TCP predeterminado (no se establece específicamente) y un tiempo de espera de lectura de 1 segundo, usando Delphi 2010 y la última versión de Indy, una conexión local (usando localhost como el nombre de host) en 1 segundo.Así que esto definitivamente no es un problema de Delphi / Indy.Por cierto, esto me da una eidsocketerror ("Error de zócalo # 10061 Conexión rechazada").

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top