![]() |
Indy FTP mit Threads Timeout
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:
LG
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; Mirko |
AW: Indy FTP mit Threads Timeout
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; |
AW: Indy FTP mit Threads Timeout
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; |
AW: Indy FTP mit Threads Timeout
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 |
AW: Indy FTP mit Threads Timeout
"cross-post":
![]() |
AW: Indy FTP mit Threads Timeout
Ja im englischen Forum liest Remy Lebeau mit, der sich damit sehr gut auskennt.
LG Mirko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:09 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz