Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Netzwerkstatus ermitteln (https://www.delphipraxis.net/178192-netzwerkstatus-ermitteln.html)

tdroese 22. Dez 2013 12:31

Netzwerkstatus ermitteln
 
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...

sx2008 22. Dez 2013 15:30

AW: Netzwerkstatus ermitteln
 
http://www.delphipraxis.net/847172-post7.html
Mit GetAdaptersAddresses() lassen sich alle möglichen Informationen über Netzwerkadapter auslesen.

r2c2 22. Dez 2013 15:31

AW: Netzwerkstatus ermitteln
 
- http://www.marian-aldenhoevel.de/dojo/internet.html
- wenn du b) unterstützen musst (also 3-Tier), für was brauchst du dann noch a). Ist ggf. nur unnötiger Aufwand das zu pflegen.
- Wenn du noch die Wahl hast, solltest du überlegen, ob du REST, statt SOAP nimmt, aber das nur nebenbei. SOAP ist meiner Erfahrung nach nur ein unnötiger Krampf. Allerdings muss man sagen, dass man REST erstmal lernen muss. Aber das ist ein anderes Thema.
- Du kannst theoretisch das Kommendozeilen-Ping benutzen bzw. aufrufen
- Du kannst dir einen kleinen Ping-Service bauen. Also in deinem Webservice eine ping-Methode rein und gut. Das ist IMHO der übliche Weg, wie man sowas macht.

mfg

Christian

tdroese 22. Dez 2013 20:13

AW: Netzwerkstatus ermitteln
 
Danke für die Ansätze bislang.

Das sollte kein **doppelpost** werden, irgendwie hatte ich das falsche Fenster geschlossen und offenbar schon gesendet - daher das ganze noch einmal...

Bin noch in vielen Dingen offen. Werde mir auch die Alternative zu SOAP angucken. Der Grund für die Intranet-Anwendung liegt a) in der Performance und b) in der Datensicherheit. Es handelt sich um sensible Daten. In der Internetversion werden lediglich Basisinformation (Neue Aufgaben, Termine) vom Client an den Server geschickt (AES verschlüsselt).

Sobald nun aber der Laptop mit der Anwendung in der Firma angeschlossen ist, wird direkt auf der Basisdatenbank gearbeitet und die Firebird DB über einen Thread aktualisiert. Die Datenbank wird ggf. auf einen SQL Server Compact umgestellt (hier teste ich aktuell).

Für weitere Ideen bin ich immer dankbar.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:21 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