Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Indy TCP-Server, unterbrochene Verbindung erkennen (https://www.delphipraxis.net/114058-indy-tcp-server-unterbrochene-verbindung-erkennen.html)

Centrii 19. Mai 2008 08:58


Indy TCP-Server, unterbrochene Verbindung erkennen
 
Hi @ all,

Ich hab mir einen kleinen TCP-Server gebastelt. Nun hab ich das Problem das ich nicht erkenne wenn ich zum TCP-Client
die Verbindung verliere, z.B. durch ausgestecktes Netzwerkkabel. Gibts da nen Ansatz wie ich das lösen könnte ?

Danke für eure Anregungen

Gruß Ruben

SirThornberry 19. Mai 2008 09:03

Re: Indy TCP-Server, unterbrochene Verbindung erkennen
 
Ich kenne keinen Ansatz. Wenn das Kabel physisch getrennt wird irgendwo auf dem langen Weg übers Internet kann man es nur erahnen wenn der Datenverkehr still steht. Wenn du aber keine Daten überträgst ist es eigentlich unmöglich zu erkennen ob irgendwo mittendrin mal kurz die Leitung getrennt war.

Sherlock 19. Mai 2008 09:04

Re: Indy TCP-Server, unterbrochene Verbindung erkennen
 
Wenn grad nix zu tun ist, schick halt immer wieder mal ein Byte an die Clients.

Wenn keine Rückmeldung kommt, dann ist was putt.

Sherlock

Centrii 19. Mai 2008 09:32

Re: Indy TCP-Server, unterbrochene Verbindung erkennen
 
gibt es da nicht sowas wie ein KeepAlive? Ich weiß vom Client aus kann man da was machen, aber vom Server aus find ich nichts.
Blöde Frage, was für ein Event wird ausgelöst wenn ich als Server was zum Client sende und von dem eine Bestätigung zurückkommt ??

hincapie 20. Mai 2008 05:55

Re: Indy TCP-Server, unterbrochene Verbindung erkennen
 
Zitat:

Zitat von Centrii
Blöde Frage, was für ein Event wird ausgelöst wenn ich als Server was zum Client sende und von dem eine Bestätigung zurückkommt ??

Gibt es nicht (zumindest nicht bei Indy 9), Du mußt mit einem Timer nachprüfen, ob etwas kommt...
Such mal nach IdTCPClient, da gibt es Beispiele hier... :zwinker:

Centrii 20. Mai 2008 06:08

Re: Indy TCP-Server, unterbrochene Verbindung erkennen
 
Moin

das dachte ich mir nämlich, jetzt hab ich nur das Problem das der TCPClient unter umständen nie sendet,
ich versorge mehrere Clients mit Daten, bekomme selber aber nichts. Sollte ich was bekommen, werte ich es im
OnExecute vom TCP-Server aus. Das funktioniert auch alles wunderbar. Nun erkenne ich es nicht wenn ein Client
nicht ordnungsgemäß beendet wird oder eine Netzwerkkabel ausgesteckt wird.
Mein Client bekommt es mit über ein KeepAlive.
Mit der Option "SIO_KEEPALIVE_VALS" in der System-Funktion "WSAIoctl" aus der "WS2_32.dll" kann diese Option aktiviert werden,
und gleichzeitig die Zeiten für den Timeout und den Interval festlegt werden. Dann werden vom TCP/IP-Stack automatisch "KeepAlive"-Pakete generiert,
wenn länger als die bei Timeout angegebene Zeit kein Datenaustausch stattfindet. Erfolgt auf diese "KeepAlive"-Pakete kein Acknowledge,
wird vom TCP/IP-Stack erkannt, daß die Verbindung unterbrochen ist. Das alles macht der TCP/IP-Stack alleine,
ohne das dafür etwas programmiert werden muß (außer dem Setzen der Option natürlich).
In meinem Client für den TCP-Server erkenne ich dadurch eine unterbrochene Verbindung nach spätestens einer Minute.
Nur leider schaff ich das nicht für den TCP-Server.
Sollte sich jemand damit auskennen, und mir ein paar Tipps geben, würde ich mich riesig freuen.

Gruß Ruben


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:47 Uhr.

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