AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke IdFTP No-transfer-time exceeded
Thema durchsuchen
Ansicht
Themen-Optionen

IdFTP No-transfer-time exceeded

Ein Thema von mariusbenz · begonnen am 13. Dez 2017 · letzter Beitrag vom 14. Dez 2017
Antwort Antwort
mariusbenz

Registriert seit: 6. Mär 2015
38 Beiträge
 
Delphi 10.3 Rio
 
#1

IdFTP No-transfer-time exceeded

  Alt 13. Dez 2017, 14:05
Hallo,

Eine Forumsuche hat bis jetzt noch nichts gebracht, deshalb ein neues Thema:

Quellcode vorab:
Delphi-Quellcode:
if IdFTP.Connected then
  begin
    IdFTP.List();
    for I := 0 to IdFTP.DirectoryListing.Count - 1 do
      begin
        [...]
      end
    [...]
  end;
Der Code ist Teil einer Funktion, die alle paar Sekunden von einem Timer ausgeführt wird. Funktioniert auch alles wunderbar. Aber nach ziemlich genau 10 Minuten kommt beim Ausführen der Zeile "IdFTP.List();" eine Exception:
exception class : EIdFTPServiceNotAvailable
exception message : No-transfer-time exceeded. Closing control connection.

Das einzige, was ich dazu gefunden hab, ist dass manche FTP-Server nach einer gewissen Zeit die Verbindung killen.
Allerdings prüfe ich ja vorher auf Connected ab, also bin ich ja prinzipiell noch verbunden?
Folgendes habe ich bereits versucht:
1. IdFTP.noop;
2. Jedes mal eine temporäre Datei uploaden
3. nach jedem Timer-Event disconnecten

1 hat nichts gebracht
2 und 3 haben funktioniert aber sind nur unschöne Workarounds.

Leider ist der Administrator unseres FTP-Servers im Urlaub, deshalb habe ich keine Ahnung, ob das am FTP-Server selbst liegt oder ob ich noch was anderes einstellen kann.
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.017 Beiträge
 
Delphi 2009 Professional
 
#2

AW: IdFTP No-transfer-time exceeded

  Alt 13. Dez 2017, 18:26
Die Verbindung zu FTP kann in aller Regel nicht aufrecht gehalten werden. Daher ist Lösung 3 schon korrekt.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.136 Beiträge
 
Delphi 12 Athens
 
#3

AW: IdFTP No-transfer-time exceeded

  Alt 13. Dez 2017, 19:33
Zitat:
1 hat nichts gebracht
Nicht jeder FTP-Server reagiert auf NOOP, indem er dadurch den Timeout resettet,
und auch nicht jeder FTP-Client sendet diese Nachricht.

Oder aufrecht halten und reconnecten wenn es knallt.
Aber 10 Minuten ist jetzt auch recht lange, womit Punkt 3 natürlich die bessere Lösung ist.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von mischerr
mischerr

Registriert seit: 6. Feb 2004
Ort: Konz
238 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: IdFTP No-transfer-time exceeded

  Alt 14. Dez 2017, 07:28
Ich würde es wahrscheinlich quick-and-dirty so lösen:
Code:
  for j:= 0 to 1 do
    try
      if IdFTP.Connected then
        begin
          IdFTP.List();
          for I := 0 to IdFTP.DirectoryListing.Count - 1 do
            begin
              [...]
            end
          [...]
          break;
        end;
    except
      on e: EIdFTPServiceNotAvailable do
        if i=0 then
          begin
            IdFTP.Disconnect;
            IdFTP.Connect;
          end;
    end;
...ungetestet, als Anregung...
  Mit Zitat antworten Zitat
mariusbenz

Registriert seit: 6. Mär 2015
38 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: IdFTP No-transfer-time exceeded

  Alt 14. Dez 2017, 10:22
Danke erstmal an alle für eure Antworten.


Ich würde es wahrscheinlich quick-and-dirty so lösen:
Code:
  for j:= 0 to 1 do
    try
      if IdFTP.Connected then
        begin
          IdFTP.List();
          for I := 0 to IdFTP.DirectoryListing.Count - 1 do
            begin
              [...]
            end
          [...]
          break;
        end;
    except
      on e: EIdFTPServiceNotAvailable do
        if i=0 then
          begin
            IdFTP.Disconnect;
            IdFTP.Connect;
          end;
    end;
...ungetestet, als Anregung...
Habe das jetzt mal eingebaut und das scheint zu funktionieren. Ich finde das momentan besser als alle paar Sekunden neu zu verbinden. Aber ich kenne mich mit FTP-Servern nicht aus, deshlab weiß ich nicht, ob es den mehr stört, wenn sich jemand alle paar Sekunden neu verbindet oder er einfach solange wie möglich die Verbindung aufrecht erhält.
Und bevor jemand suchen geht, der das hier liest, die Exception-Klasse "EIdFTPServiceNotAvailable" ist in der Unit "IdReplyFTP" zu finden.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz