2012-03-28 4 views
4

Wenn ich die Funktion aufrufenIdFtp.List wirft Socket-Fehler # 10054 gelegentlich

IdFtp.List(myList, '', false); 

danach habe ich angemeldet und änderte das FTP-Verzeichnis, erhalte ich einen Socket-Fehler # 10054 Ausnahme ("Connection Reset durch Peer. ") gelegentlich.

Wenn ich diese Funktion z. 20 mal hintereinander bekomme ich diese Ausnahme 1 mal.

Dieses Problem habe ich nur auf Vista OS begegnet.

Weiß jemand, was das Problem ist oder wie ich es vermeiden kann?

+0

habe ich, wenn ein ähnliches Problem Da der Befehl 'FEAT' auf meinem Server nicht unterstützt wird, habe ich 'idftp.AutoIssueFEAT' auf' false 'gesetzt und das Problem ist weg. Aber Sie bekommen das gleiche Problem von einer anderen Quelle, nicht sicher, was es in Ihrem Fall ist. –

Antwort

2

Das FTP-Protokoll verwendet mehrere Socket-Verbindungen. Jedes Mal, wenn Sie List() anrufen, wird eine neue Socket-Verbindung aufgebaut, um die angeforderten Listungsdaten zu übertragen. Es hört sich so an, als würde der FTP-Server den Socket am Ende einer Übertragung nicht immer korrekt schließen.

+0

Das Merkwürdige ist, dass fast der erste Aufruf eine Ausnahme auslöst. Ich habe gerade die FTP-Server-Log-Datei überprüft, wie andere Werkzeuge LIST-Dateien (iexplorer, firefox). Ein Unterschied besteht darin, dass sie den PASSIV-Modus verwenden und dann ein anderer PORT für die Datenübertragung verwendet wird. –

+0

Der Befehl 'PORT' wird für Übertragungen im aktiven Modus verwendet, bei denen der FTP-Server eine Verbindung zum Client herstellt. Der Befehl 'PASV' wird für passive Übertragungen verwendet, bei denen der Client eine Verbindung zum FTP-Server herstellt. Passive Modus-Übertragungen sind mehr Firewall/Router-freundlich für Clients zu verwenden. 'TIdFTP' hat eine' Passive' Eigenschaft, um den zu verwendenden Modus zu spezifizieren.In beiden Fällen trennt der FTP-Server den Socket, wenn die angeforderten Daten übertragen werden, was den 10054-Fehler verursachen kann, wenn er nicht korrekt ausgeführt wird. Ich werde versuchen, Indy auf den neuesten Stand zu bringen, um das besser zu handhaben, aber ich habe gerade keine ETA dazu. –

3

Sie können nicht viel tun, da die Trennung vom FTP-Server erfolgt. Sie haben ein paar Möglichkeiten:

  • Zunahme (oder deaktivieren) die Timeout-Einstellungen (all FTP-Server hat einen anderen Namen dafür) auf dem FTP-Server-Verbindungseinstellungen.
  • Sagen Sie dem Server, dass Sie am Leben sind, indem Sie regelmäßig den Befehl NOOP senden (das Umschalten in den passiven Modus kann ebenfalls helfen).
  • Fangen Sie diese Ausnahme und wieder ohne Verbindung (Dies ist meine bevorzugte Lösung, weil wir viele FTP-Server haben und ich nicht die sys-Admins die FTP-Server Timeout-Einstellungen ändern).

Hier ist ein Screenshot von FileZilla FTP-Server-Timeout-Einstellungen:

enter image description here

Beachten Sie, dass mit den obigen Einstellungen wird der FTP-Client nach 2 min getrennt werden Nichtaktivität.
Wenn Sie diesen Wert auf 0 setzen, wird das Zeitlimit deaktiviert.

+0

Auf meiner Maschine und auf den meisten anderen Clients funktioniert es ohne Probleme (und daher kann ich nicht reproduzieren). Ich denke, es hängt von der Client-Maschine ab. –

0

In der Komponente "IdFTP", die folgenden Eigenschaften ändern:

  • "Passive" = "False"
  • "Transfertype" = "ftASCII"
Verwandte Themen