Frage

Ich muss mit einer TCP / IP-Verbindung mit einem Gerät auf dem lokalen Netzwerk herstellen. Wenn ich ein TidtcPlient benutze, funktioniert alle gut, außer einer Sache:

Wenn die Verbindung nicht verfügbar ist, dauert es etwa 18-20 Sekunden, bevor ich ein Timeout bekomme. Die Eigenschaft ConnectTeTout hat keine Effekte, egal welche Werte ich gesetzt habe. Es dauert immer die gleiche Zeit vor einem Timeout.

Diese Antwort erwähnt lange Verzögerungszeiten für ein Timeout und ich bin Ich frage mich, ob das mit den Indy-Komponenten zusammenhängt?

Ich muss herausfinden, ob die Verbindung nicht schnell etabliert werden kann, sagen wir innerhalb von 1 Sekunde höchstens innerhalb von 1 Sekunde.

Gibt es eine Möglichkeit, dies mit Indy zu tun, oder muss ich verschiedene Komponenten / einen anderen Ansatz verwenden?

(ich benutze die indy 10-Version, die mit Delphi 2009 geliefert wurde)

edit :
Ich folgte den Anweisungen, um Indy auf die neueste Version in zu verbessern. Dieser Beitrag .

Noch dasselbe dauert es nun konsequent 22 Sekunden, bis TCPClient.Connect zurückgibt, wenn keine Verbindung besteht. ConnectTeTout und / oder ReadertimeOut scheinen darauf keinen Einfluss darauf zu haben.

Andere Tipps

ConnectTeTout funktioniert ordnungsgemäß für 2010 und XE.Vielleicht können Sie Ihre Indy-Version auf die neuesten (es ist kostenlos) aktualisieren.Ich habe eine Funktion, die "Schnellcheck" verbindet, nur um die Verfügbarkeit des Geräts zu überprüfen, und diese Timeouts sind 5 Sekunden ohne Probleme (in beiden Jahren und XE).

Mit einem Standard-TCP-Client-Anschluss-Timeout (nicht speziell eingestellt) und ein gelesenes Timeout von 1 Sekunde, mit Delphi 2010 und der neuesten Indy-Version, eine lokale Verbindung (mithilfe von localhost als Hostname) in 1 Sekunde (Verwendung localhost als Hostname).Dies ist also definitiv kein Delphi / Indy-Problem.BTW, dies gibt mir ein EIDSocketError ("Socket-Fehler # 10061-Verbindung abgelehnt").

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top