AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Indy FTP mit Threads Timeout

Indy FTP mit Threads Timeout

Ein Thema von oakley · begonnen am 22. Jan 2023 · letzter Beitrag vom 24. Jan 2023
Antwort Antwort
oakley

Registriert seit: 15. Aug 2005
251 Beiträge
 
#1

Indy FTP mit Threads Timeout

  Alt 22. Jan 2023, 17:07
Hallo zusammen,

ich habe hier einen FTP Download Threads damit das auf dem Ipad auch läuft ohne die GUI zu blockieren.
Das ist alles soweit okay und funnktioniert auch aber wie fange ich Timeouts ab?

Ich habe das Connect Timeout und Read Timeout als testweise auf 12000 gesetzt, Transfer Timnout auf 5000, Listen Timeout steht auf 10000 (standard) aber der Status zeigt mir nicht an wenn der Timeout kommt und die Verbindung abgebrochen wird.

Um das zu testen habe, ich einfach mal am IPad das Wifi abgeschaltet, dann müsste doch nach 12 Sekunden das Timeout kommen?

Den Thread starte ich zum Testen mit einem Button.

Delphi-Quellcode:
constructor TLoadThread.Create;
begin
  inherited Create(True);
  FreeOnTerminate := True;
end;

procedure TLoadThread.Execute;
begin
  try
    Form2.FTP1.Connect;
    try
      try
        Form2.Ftp1.Get('file1.txt',TPath.Combine(TPath.GetTempPath, 'file1.txt'),True,false);
        Form2.Ftp1.Get('file2.txt',TPath.Combine(TPath.GetTempPath, 'file2.txt'),True,false);
      except
        on e: EIdSocketError do //[B]<- hier würde ein Timeout auftauchen dachte ich[/B]
        begin
          Form2.Memo1.Lines.add(DateTimetoStr(now()) + ' Error: ' + InttoStr(e.LastError) + ' ' + e.Message);
        end;
      end;
    finally
      Form2.FTP1.Disconnect;
    end;
  except
    on e: EIdSocketError do
    begin
      Form2.Memo1.Lines.add(DateTimetoStr(now()) + ' Error: ' + InttoStr(e.LastError) + ' ' + e.Message); //Error for not connecting to ftp server
    end;
  end;
end;

procedure TForm2.ThreadTerminated(Sender: TObject);
begin
  xThread := nil;
  Loading := False;
  Memo1.Lines.Add(DateTimetoStr(now()) + ' Thread Terminated');
end;

procedure TForm2.FTP1Status(ASender: TObject; const AStatus: TIdStatus;
  const AStatusText: string);
begin
    TThread.Queue(nil,
    procedure
    begin
      Memo1.Lines.Add(DateTimetoStr(now()) + ' ' + AStatusText);
    end
  );
end;
LG

Mirko

Geändert von oakley (22. Jan 2023 um 17:14 Uhr)
  Mit Zitat antworten Zitat
oakley

Registriert seit: 15. Aug 2005
251 Beiträge
 
#2

AW: Indy FTP mit Threads Timeout

  Alt 22. Jan 2023, 21:26
Hallo nochmal,

ich denke dieser try, except Block funktioniert nicht weil der FTP Transfer bereits gestaretet ist wenn ich den Netzausfall simuliere.
Nur wie fange ich den Abbruch bzw. den Ausfall ab? Ich würde auch gerne auf eine schlechte Verbindungsqualität reagieren.
Da das Ganze via Ios läuft ist ping nicht machbar (zumindest nicht mit Indy).

Delphi-Quellcode:
try
  Form2.Ftp1.Get('file1.txt',TPath.Combine(TPath.GetTempPath, 'file1.txt'),True,false);
  Form2.Ftp1.Get('file2.txt',TPath.Combine(TPath.GetTempPath, 'file2.txt'),True,false);
except
  on e: EIdSocketError do //[B]<- hier würde ein Timeout auftauchen dachte ich[/B]
  begin
     Form2.Memo1.Lines.add(DateTimetoStr(now()) + ' Error: ' + InttoStr(e.LastError) + ' ' + e.Message);
  end;
end;
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.189 Beiträge
 
Delphi 7 Professional
 
#3

AW: Indy FTP mit Threads Timeout

  Alt 23. Jan 2023, 13:32
Handelt es sich denn bei einem TimeOut um einen SocketError?

In der Unit IdExceptionCore sind noch etliche weitere Exceptions definiert, z. B. EIdReadTimeout, EIdConnectTimeout.

Ändert sich durch eine Erweiterung der Fehlerbehandlung etwas?
Delphi-Quellcode:
try
  Form2.Ftp1.Get('file1.txt',TPath.Combine(TPath.GetTempPath, 'file1.txt'),True,false);
  Form2.Ftp1.Get('file2.txt',TPath.Combine(TPath.GetTempPath, 'file2.txt'),True,false);
except
  on e: EIdSocketError do //<- hier würde ein Timeout auftauchen dachte ich
  begin
     Form2.Memo1.Lines.add(Format('%s EIdSocketError: %d %s', [DateTimetoStr(now),e.LastError,e.Message]);
  end;
  on e: EIdConnectTimeout do
  begin
     Form2.Memo1.Lines.add(Format('%s EIdConnectTimeout: %d %s', [DateTimetoStr(now),e.LastError,e.Message]);
  end;
  on e: EIdReadTimeout do
  begin
     Form2.Memo1.Lines.add(Format('%s EIdReadTimeout: %d %s', [DateTimetoStr(now),e.LastError,e.Message]);
  end;
  on e: EIdException do //<- hier würde eine beliebige INDY-Exception auftauchen, hoffe ich
  begin
     Form2.Memo1.Lines.add(Format('%s EIdException: %d %s', [DateTimetoStr(now),e.LastError,e.Message]);
  end;
  on e: Exception do //<- hier wird alles an Exceptions auftauchen, was bisher nicht abgefangen wurde.
  begin
     Form2.Memo1.Lines.add(Format('%s %s: %s', [DateTimetoStr(now),e.ClassName,e.Message]);
  end;
end;
  Mit Zitat antworten Zitat
oakley

Registriert seit: 15. Aug 2005
251 Beiträge
 
#4

AW: Indy FTP mit Threads Timeout

  Alt 23. Jan 2023, 15:42
Hey,

ich habe es jetzt mal länger laufen lassen. Nach ca. 18 Minuten kam EIdSocketError:22 Socket Fehler # 22 Ungültiges Argument.
Es kommt also eine Exception aber warum erst nach 18 Minuten?

LG

Mirko

Geändert von oakley (23. Jan 2023 um 17:08 Uhr)
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
2.952 Beiträge
 
Delphi 2009 Professional
 
#5

AW: Indy FTP mit Threads Timeout

  Alt 24. Jan 2023, 16:37
"cross-post": https://en.delphipraxis.net/topic/82...-and-timeouts/
Michael Justin
  Mit Zitat antworten Zitat
oakley

Registriert seit: 15. Aug 2005
251 Beiträge
 
#6

AW: Indy FTP mit Threads Timeout

  Alt 24. Jan 2023, 18:29
Ja im englischen Forum liest Remy Lebeau mit, der sich damit sehr gut auskennt.

LG

Mirko
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 22:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2023, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf