Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi TCP Client disconnect (https://www.delphipraxis.net/138090-tcp-client-disconnect.html)

XXcD 3. Aug 2009 14:07


TCP Client disconnect
 
Hallo,
ich verwende den Indy TCP Client und möchte dort ein OnDisconnect Ereignis
einbauen.

Dieser Disconnect kommt vom Server aus und der Client soll darauf reagieren.
Theoretisch könnte ich ja den Server noch etwas senden lassen, dass das Disconnect ausgelöst wird, aber es kann
ja auch vor kommen, dass plötzlich die Internetverbindung getrennt wird und dann kommt das nicht an.

Bis jetzt hab ich das so:
Delphi-Quellcode:
try
read:=IdTCPClient2.IOHandler.ReadLn('', 50);
except
if OnChannel=true then
begin
IdTCPClient2.Disconnect;
Timer1.Enabled:=false;
Showmessage('Verbindung getrennt!');
Form8.Close;
end;
end;

...
Aber immer wenn die verbindung sich trennt kommt es vor, dass noch einmal die Nachricht erscheint "Connection reset by peer".
Ich dachte wenn ich try und except nutze kommt das nicht, aber das bringt leider nichts.

XXcD 3. Aug 2009 15:22

Re: TCP Client disconnect
 
Gerade habe ich rausgefunden, dass es mit
Delphi-Quellcode:
on E:EIdSocketError do
gehen müsste.

Leider funktioniert das nicht.

Die Muhkuh 3. Aug 2009 15:24

Re: TCP Client disconnect
 
Welche Indy-Version verwendest Du?

XXcD 3. Aug 2009 15:26

Re: TCP Client disconnect
 
Indy 10

Die Muhkuh 3. Aug 2009 15:28

Re: TCP Client disconnect
 
Der TCP Client bietet ein Event namens "OnDisconnected". Das dürfte es doch sein oder nicht? :gruebel:

XXcD 3. Aug 2009 15:29

Re: TCP Client disconnect
 
Aber wenn beispielsweise der Server abstürtzt dann wird das Ereignis einfach nicht ausgeführt.
Das wird irgendwie nur ausgeführt wenn ich im Client "Client.Disconnect" ausführe.

mjustin 3. Aug 2009 17:10

Re: TCP Client disconnect
 
Zitat:

Zitat von XXcD
Aber wenn beispielsweise der Server abstürtzt dann wird das Ereignis einfach nicht ausgeführt.
Das wird irgendwie nur ausgeführt wenn ich im Client "Client.Disconnect" ausführe.

Erst wenn versucht wird, Daten über den Socket zu empfangen (oder zu senden), kann das Ausfallen der Gegenseite erkannt werden. Das ist eine Eigenschaft des TCP/IP Protokolls, nicht der Indy Komponenten, und läßt sich nur auf einer höheren Schicht zum Beispiel durch regelmäßige Nachrichten ('Hallo, ich bin noch da!') lösen.

Cheers,

XXcD 3. Aug 2009 17:13

Re: TCP Client disconnect
 
Ja ich habe doch einen Timer mit Readln und das ganze in einem try except block.
Dieser wird aber nicht richtig ausgeführt.

mjustin 3. Aug 2009 17:27

Re: TCP Client disconnect
 
Zitat:

Zitat von XXcD
Ja ich habe doch einen Timer mit Readln und das ganze in einem try except block.
Dieser wird aber nicht richtig ausgeführt.

Erscheint die "Connection reset by peer" Nachricht auch wenn das Programm ausserhalb der IDE läuft?

Nein -> dann liegt es an den Exception-Einstellungen für den Debugger, hier kann man dann die Indy-Exception in die Liste der zu ignorierenden Exceptions aufnehmen
Ja -> dann wird wohl ausserhalb des try .. except irgendwo noch auf die Verbindung zugegriffen (lesend oder schreibend)

XXcD 3. Aug 2009 17:55

Re: TCP Client disconnect
 
Ich kann es beides ausschliessen.
Die Nachricht erscheint immer und der Fehler wird eindeutig in dem Timer ausgelöst, weil wenn ich den deaktivere passiert garnichts.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:10 Uhr.
Seite 1 von 2  1 2      

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