![]() |
Feststellen, dass das LAN-Kabel gezogen wurde
Hallo zusammen,
ich habe in meinem Programm ein Timing-Problem. Hintergrund ist, dass ich nicht direkt mitbekomme, wenn das LAN-Kabel gezogen wurde bzw. wenn es einen Verbindungsabbruch gibt. Ich programmiere direkt über Sockets etc. jedoch erhalte ich da erst nach einem Timeout, dass die Verbindung abgebrochen ist. Windows stellt jedoch direkt fest, wenn die Verbindung nicht mehr besteht (wird ja unten rechts in der TNA angezeigt). Wie kann ich dieses Ereignis abfangen, so dass ich auch so schnell als Möglich auf den Verbindungs-Abbruch reagieren kann ? Hat da jemand eine Idee ? mfg. Rainer |
Re: Feststellen, dass das LAN-Kabel gezogen wurde
Hallo und herzlich willkommen in der DP :dp:
Du könntest es über ![]() ![]() |
Re: Feststellen, dass das LAN-Kabel gezogen wurde
eine direkte Lösung hätt ich jetzt nicht, aber würde es reichen, wenn du das Timeout einfach runtersetzt/verkürzt?
|
Re: Feststellen, dass das LAN-Kabel gezogen wurde
Vielen Dank für Eure schnellen Antworten.
Das habe ich auch schon alles ausprobiert, aber es brachte leider nicht den gewünschten Erfolg. Ich würde gerne von dem Polling weg, also nicht permanent per GetAdapterAdresses etc. abfragen. Interruptgesteuert, so wie es innerhalb von Windows ja auch zu sein scheint (sonst würde es ja nicht unmittelbar nach dem Trennen der Verbindung in der TNA angezeigt), müsste doch auch irgendwie möglich sein. Kennt vielleicht jemand das Ereignis / die Windows-Botschaft, auf die hin ich prüfen müsste ? |
Re: Feststellen, dass das LAN-Kabel gezogen wurde
Dann schaue Dir mal den
![]() |
Re: Feststellen, dass das LAN-Kabel gezogen wurde
Evtl. hilft dir das ja weiter
![]() |
Re: Feststellen, dass das LAN-Kabel gezogen wurde
Vielen Dank ... ich schaue mir das mal an. Wird bestimmt etwas dabei sein, dass ich nutzen kann.
|
Re: Feststellen, dass das LAN-Kabel gezogen wurde
Zitat:
PC2 <-1-> Switch1 <-2-> Router <-3-> Switch2 <-4-> Hub <-5-> PC2 Mit diesem Event bekommst Du lediglich mit, wenn Kabel 1 (nur an PC1) oder Kabel 5 (nur an PC2) gezogen wird. Wird Kabel 2, 3 oder 4 gezogen, oder fällt der Router bzw. Switch 2 aus, so bekommst Du den Verbindungsabbruch wieder nur mit einem Timeout mit (wenn überhaupt). Das bedeutet also, diese Lösung deckt genau einen Sonderfall ab: Die Verbindung zwischen dem PC auf dem diese Software läuft und dem unmittelbar nächsten Netzwerkgerät wird physikalisch getrennt. Alle anderen möglichen Fehlersituationen im Netzwerk (die um längen häufiger und wohl auch wahrscheinlicher sind), fängst Du nicht ab. Lohnt es sich den Aufwand für diesen einen Sonderfall zu treiben? Ich würde empfehlen, eine logische Quittierung aller übertragenen Daten mit einem eigenen Timeout zu implementieren. Bleibt die Quittung im Zeitraum X aus, ist die Verbindung weg. |
Re: Feststellen, dass das LAN-Kabel gezogen wurde
Hallo Phoenix,
danke für das Beispiel. Da habe ich gar nicht dran gedacht. |
Re: Feststellen, dass das LAN-Kabel gezogen wurde
Ich hatte letztens ein ähnliches Problem - und bin auch in diese Falle getappt ;-)
Blöderweise sind die TCP Timeouts dazu noch generell sehr großzügig ausgelegt. Wenn Du sendest bekommst Du zwar 'relativ' zügig einen Timeout (Fehler beim Senden, weil nach etlichen Wiederholungen kein TCP-ACK kommt). Wenn Du aber nur empfängst kann es in einem der obigen Szenarien leicht passieren, dass die Applikation gute 2 Stunden auf Daten wartet, nachdem die Verbindung unterbrochen wurde, bis Du einen TCP-Timeout (Fehler beim Empfangen) bekommst. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:06 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-2025 by Thomas Breitkreuz