![]() |
Indy.get kann Socket-Fehler # 10054 nicht umleiten
Hallo Leute
ich hoffe es ist nicht zu unhöflich mit dem ersten Post gleich eine Frage zu stellen aber ich weiß nicht mehr weiter. kurz: Ich kann die Indy Exeptions nicht abfangen und das Programm bricht die aktuelle Aktion ab Detailliert: Ich versuche ein Programm zu schreiben das mit Hilfe der Indy Komponente von einem Webserver Dateien herunterlädt. Sollte beim download ein Problem auftreten möchte ich das das Programm kurz wartet und es dann erneut versucht da der Webserver um den es sich handelt chronisch überlastet ist kann das leider öfter passieren. Das Indy Exeptions auswirft möchte ich gar nicht verhindern sondern umleiten auf eine ListenView Spalte, bei „Fehler 404“ sowie die Meldung das der Webserver die Verbindung ablehnt „Socket-Fehler # 10061 Verbindung abgelehnt.“ funktioniert auch alles wunderbar. Löse ich aber einen Fehler aus indem ich während des Downloads den Webserver beende erhalte ich eine messagebox mit der Fehlermeldung "Socket-Fehler # 10054 Die Verbindung wurde von Peer zurückgesetzt" die ich weder mit noch ohne Debugger umgeleitet bekomme und was noch störender ist das ganze bricht die repeat schleife ab. Wie kann ich diese Meldung abfangen? Ist es möglich das diese Meldung nicht von Delphi/Indy kommen sondern vom Betriebssystem? Ein Ausschnitt aus meinem Code habe ich hier:
Delphi-Quellcode:
// Download1
function download1(z, q : String): String; var FS : Tfilestream; begin FS := TFileStream.Create(z, fmCreate or fmShareDenyNone); try try Form1.IdHTTP1.Get(q,FS); result := ''; except On E:EIdHTTPProtocolException do result := 'HTTP-Fehler: '+IntToStr(E.ErrorCode); On E:EIdSocketError do result := E.Message; end; finally FS.Free; end; end; // test ! procedure TForm1.Button5Click(Sender: TObject); var quelle, ziel, download : String; begin quelle := 'http://192.168.0.2/test/test10mb.bmp'; ziel := Valuelisteditor1.Values['Zielordner']+'\test10mb.bmp'; abbruch := false; repeat //abbruch if abbruch then begin Form1.idhttp1.Disconnect; Form1.Listview1.items[Form1.ListView1.Items.Count-1].subitems[4] := 'abbruch'; exit; end; //laden Form1.Listview1.items[Form1.ListView1.Items.Count-1].subitems[4] := 'lade'; download := download1(ziel, quelle); //fehler if (download <> '') then begin Form1.idhttp1.Disconnect; Form1.Listview1.items[Form1.ListView1.Items.Count-1].subitems[4] := download; Delay(2000); Form1.Listview1.items[Form1.ListView1.Items.Count-1].subitems[0] := inttostr(strtoint(Form1.Listview1.items[Form1.ListView1.Items.Count-1].subitems[0]) + 1); end; until (download = ''); Form1.Listview1.items[Form1.ListView1.Items.Count-1].subitems[4] := 'Fertig'; end; |
AW: Indy.get kann Socket-Fehler # 10054 nicht umleiten
Hey,
du kannst ja mal im Einzelschritt "durchsteppen". Eigentlich müsste EIdSocketError ja auch diese Exception abfangen.
Delphi-Quellcode:
btw. STRG + D formatiert den Quellcode :P
try
Form1.IdHTTP1.Get(q,FS); result := ''; except on E:EIdHTTPProtocolException do result := 'HTTP-Fehler: ' + IntToStr(E.ErrorCode); on E:EIdSocketError do result := E.Message; // Fehler ganz anderer Art?? on E:Exception do result := 'strange error'; end; |
AW: Indy.get kann Socket-Fehler # 10054 nicht umleiten
Zitat:
Zitat:
Wenn ich das Programm mit F7 durch den debugger laufen lasse kommt vor der messagebox die Meldung: Im Projekt Form1.exe ist eine Exeption der Klasse EIDSocketError mit der Meldung 'Socket-Fehler # 10054 Verbindung von Peer zurückgesetzt.' aufgetreten. Was ja darauf schließen lassen sollte das E:EIdSocketError richtig wäre, ich verstehe es nicht. |
AW: Indy.get kann Socket-Fehler # 10054 nicht umleiten
Hi,
tritt das Ganze auch auf, wenn du das Programm komplett ohne IDE startest oder vielleicht nur, wenn du es aus Delphi heraus startest? LG, Frederic |
AW: Indy.get kann Socket-Fehler # 10054 nicht umleiten
Bei welcher Zeile genau kommt diese Fehlermeldung? Also in deinem Codeschnipsel.
|
AW: Indy.get kann Socket-Fehler # 10054 nicht umleiten
Zitat:
Zitat:
Delphi-Quellcode:
showmessage('s')
Form1.IdHTTP1.Get(q,FS); // wird nicht mehr angezeigt ! showmessage('e') |
AW: Indy.get kann Socket-Fehler # 10054 nicht umleiten
|
AW: Indy.get kann Socket-Fehler # 10054 nicht umleiten
Ich habe noch keinerlei Updates für Indy installiert. Werde das mal versuchen.
Update: 15:15 habe die Version Indy10_4684.zip von ![]() Update: 16:10 Mittlerweile habe ich meinen Fehler gefunden: Form1.idhttp1.Disconnect; das hatte ich eingefügt weil das Programm nach einer serverseitigen Trennung auch wenn der Server wieder verfügbar war immer noch die Meldung Fehler # 10054 ausgab. Vielen Danke an geskill und fkerber |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:12 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