Hallo,
bin gerade dabei mein Projekt gegen diverse Einflüsse abzusichern.
Habe u.a. eine TCP Verbindung über LNet und möchte eine "Lost connection" erkennen - Client und Serverseitig.
D.h. ich trenne die Netzwerkverbindung durch Stecker ziehen und möchte das erkennen.
Wie kann man das abfangen ?
Frank
LNet "Lost connection" erkennen
-
- Beiträge: 582
- Registriert: Sa 22. Okt 2016, 23:12
- OS, Lazarus, FPC: W10, L 3.8
- CPU-Target: 32+64bit
- Wohnort: Dresden
Re: LNet "Lost connection" erkennen
Hallo Frank,
unter Windows kannst du folgendes nutzen. Gilt aber nur wenn das Kabel abgezogen wird oder das WLan Modul deaktiviert wird.
Ansonst einen Ping wohin und auswerten.
Oder du baust dir eine "Heartbeat" ein, der halt schaut ob der Server/Client noch da ist.
Der Server/Client trägt die empfangenen Heartbeats in einer Liste ein und schaut alle x sekunden
nach ob der Server/Client noch da ist.
LG Maik
unter Windows kannst du folgendes nutzen. Gilt aber nur wenn das Kabel abgezogen wird oder das WLan Modul deaktiviert wird.
Code: Alles auswählen
program Project1;
uses
WinInet;
var
origin: cardinal;
begin
WriteLn(InternetGetConnectedState(@origin,0));
ReadLn;
end.
Oder du baust dir eine "Heartbeat" ein, der halt schaut ob der Server/Client noch da ist.
Der Server/Client trägt die empfangenen Heartbeats in einer Liste ein und schaut alle x sekunden
nach ob der Server/Client noch da ist.
LG Maik
LG Maik
Windows 10,
- Lazarus 3.8 (stable) + fpc 3.2.2 (stable)
- Lazarus 4.99 (trunk) + fpc 3.3.1 (main/trunk)
Windows 10,
- Lazarus 3.8 (stable) + fpc 3.2.2 (stable)
- Lazarus 4.99 (trunk) + fpc 3.3.1 (main/trunk)
Re: LNet "Lost connection" erkennen
Der Autor von Synapse hatte zu dem Thema mal etwas geschrieben;
http://www.ararat.cz/synapse/doku.php/p ... connection
http://www.ararat.cz/synapse/doku.php/p ... connection
- af0815
- Lazarusforum e. V.
- Beiträge: 6784
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: LNet "Lost connection" erkennen
Das Erkennen des Zustandes ist nicht einfach. Es hängt auch sehr stark, vom BS und der Implentierung der Sockets aus BS ab.
Ich bin dem begegnet bei der Kontrolle der Verbindung zu DB-Servern über schlechte Verbindungen. Manche Implementierungen geben dir keine vernünftige Fehlermeldung retour. Das sind manchmal TimeOuts von bis zu 2 Min. drinnen. Die beste Erfahrung habe ich immer noch mit dem guten alten Ping gemacht, wenn der über die Strecke zulässig ist (Firewalls blocken das oft). Ich mache dann immer wieder einen Ping, bevor ich die Verbindung wieder aufbaue.
Wenn man beide Seiten programmiert, so ist ein 'Alive' sinnvoll. Wenn der fehlt, ist die Verbindung tot, auch wenn der Socket noch nicht einen Fehler gemeldet hat. Das dauert oft, oder bringt eine Fehlermeldung aus der Bibliothek, die man überhaupt nicht braucht (bei Headless Systemen).
Bei Linux muss man seine Rechte so setzen, das man den Ping überhaupt als User absetzen kann.
Ich bin dem begegnet bei der Kontrolle der Verbindung zu DB-Servern über schlechte Verbindungen. Manche Implementierungen geben dir keine vernünftige Fehlermeldung retour. Das sind manchmal TimeOuts von bis zu 2 Min. drinnen. Die beste Erfahrung habe ich immer noch mit dem guten alten Ping gemacht, wenn der über die Strecke zulässig ist (Firewalls blocken das oft). Ich mache dann immer wieder einen Ping, bevor ich die Verbindung wieder aufbaue.
Wenn man beide Seiten programmiert, so ist ein 'Alive' sinnvoll. Wenn der fehlt, ist die Verbindung tot, auch wenn der Socket noch nicht einen Fehler gemeldet hat. Das dauert oft, oder bringt eine Fehlermeldung aus der Bibliothek, die man überhaupt nicht braucht (bei Headless Systemen).
Bei Linux muss man seine Rechte so setzen, das man den Ping überhaupt als User absetzen kann.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).