![]() |
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 |
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.
|
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 |
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 ?? |
Re: Indy TCP-Server, unterbrochene Verbindung erkennen
Zitat:
Such mal nach IdTCPClient, da gibt es Beispiele hier... :zwinker: |
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 10:49 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 by Thomas Breitkreuz