Einzelnen Beitrag anzeigen

tdroese

Registriert seit: 12. Nov 2013
7 Beiträge
 
#1

Netzwerkstatus ermitteln

  Alt 22. Dez 2013, 12:31
Hallo Forum!

Vorab wünsche ich euch allen ein schönes Weihnachtsfest und einen guten Rutsch ins Jahr 2014.

Ich hoffe hier im Forum noch ein kleines Geschenk abstauben zu können - ich weiß nämlich nicht mehr weiter. Die letzten 2 Tage versuche ich den Verbindungsstatus meiner Anwendung zu ermitteln. Aber der Reihe nach.

Meine Anwendung kann über drei Kanäle funktionieren.

a) Direkte Anbindung an die Datenbank (Intranet - Büro).
b) Indirekte Anbindung an die Datenbank über Webservices (Internet - Unterwegs).
c) Offline - Nutze eine lokale Firebird-DB (Offline - ohne Verbindung).

Die Dynamik läuft auch soweit ganz gut (wenn ich es mit einem Schalter umlege). Nun würde ich gern den "Status" der Verbindung automatisch (Timer/Thread) ermitteln (alle 10 Sekunden).

Dazu habe ich mich an TIdICMPClient, TIdTCPClient, TWebBrowser und auch den alten TClientSockets versucht. Inzwischen sehe ich aber vermutlich den Wald vor lauter Bäumen nicht mehr.

Ich hatte/habe folgenden Ansatz.

Versuche die lokale IP 10.10.1.115 zu pingen/connecten. Sofern eine Verbindung möglich ist bzw. der Host gefunden wird - dann handelt es sich um eine "Intranet-Verbindung = conIntranet".

Sofern dieser Host nicht gefunden/connected werden kann - versuche meinetwegen "Google.de" oder sonst eine Seite zu erreichen. Falls dies möglich ist handelt es sich um eine "Internet-Verbindung = conInternet").

Hat nun jemand das Netzwerkkabel getrennt, oder WLAN abgeschaltet und die Komponente liefert einen Host Fehler, dann arbeite "Offline = conOffline".

Die TIdICMPClient Geschichte habe ich recht flott verworfen, da dies nur bei Admin-Zugang funktioniert. Sobald jemand als "Benutzer" angemeldet ist - geht es nicht mehr.

Bei den anderen Varianten bekomme ich teilweise Ergebnisse, aber die Reaktionszeiten sind mehr als lang.

Hat jemand von euch eine Idee wie man den Status einer Verbindung sauber und zyklisch im Thread ermitteln kann?

Wenn ich das Manuell mit "Ping" als cmd ausführe, dann habe ich meine Info in < 5 Sekunden. Mein Programm hängt hier > 10.

Habe bewusst keinen Code angehängt - da es mir um andere/bessere Ideen geht...
  Mit Zitat antworten Zitat