Hallo.
Ich habe ein Problem mit
Indy (Version bei Turbo Delphi Explorer).
Ich erhalte manchmal, z.B. beim Benutzen von Proxies oder bei plötzlicher Servertrennung die Meldung 10054 "Connection reset by peer". Das Problem ist, dass die Verbindung unterbrochen wird und der IdHTTP keine Daten mehr an den Server senden kann.
Nun kommen bei mir folgende Sonderfälle hinzu, die vielleicht bei den meisten 0-8-15 in Foren besprochenen Themen vielleicht nicht direkt vorkommen:
1. Ich bin auf ein Cookie angewiesen. Dieses MUSS erhalten bleiben, damit der Benutzer eingeloggt ist und die korrekten Daten erhält.
2. Ich verwende keine Connect() oder Disconnect-Methoden. Ich verwende lediglich .Get() und .Post()
3. Das Programm hat eine lange Laufzeit und .Get und .Post werden nur auf Benutzeranfrage durchgeführt. Trotzdem bleibt die Verbindung aufgrund der Cookies bestehen.
Desweiteren nutze ich den IdCookieManager als Klasse (modif.
http://www.delphipraxis.net/internal...=918858#918858 ).
Jetzt habe ich nach vielen Recherchen herausgefunden, dass man bei längerer Inaktivität die Verbindung trennen und wieder neu aufbauen soll.
Aber: Wie mache ich das? Ich könnte nach jedem .Get() und .Post() zwar die Verbindung kappen. Aber wie connecte ich anschließend wieder? Das ganze Socket-Connect Zeug macht IdHTTP ja in Form von Get() und Post() für mich, sodass ich mich darum nicht mehr kümmern muss, sondern nur die GET und POST Anfragen an den Server schicke. Und was ist mit den Cookies?
Am liebsten wäre mir ja, wenn ich eine Klasse hätte, die IdHTTP erweitert und .Get und .Post so verändert, dass bei einem 10054 die Verbindung einfach neu aufgebaut wird, unter Beibehaltung aller Cookies etc.
PS: Es kommt noch hinzu, dass mein Programm sich nicht mehr beenden lässt, wenn die Verbindung einmal abgebrochen ist, was echt nervt.
Es wird folgendes ausgeführt:
Delphi-Quellcode:
procedure TDownloaderForm.form_close_query(Sender: TObject; var CanClose: Boolean);
begin
if not NoCloseConfirmation then
begin
case MessageShow(mstConfirmation, LNG_REALLY_QUIT_DOWNLOAD, MB_YESNOCANCEL) of
idYes: begin
AOBJ.Terminate;
CanClose := true;
end;
idNo: CanClose := false;
idCancel: CanClose := false;
end;
end;
end;
procedure TMyObject.Terminate;
begin
if FHTTP.Connected then FHTTP.Disconnect;
FHTTP.Tag := 1;
end;
Hat jemand eine Idee?
Gruß
Daniel Marschall