AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Netzwerkstatus ermitteln

Ein Thema von tdroese · begonnen am 22. Dez 2013 · letzter Beitrag vom 22. Dez 2013
Antwort Antwort
tdroese

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

Netzwerkstatus ermitteln

  Alt 22. Dez 2013, 13: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
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#2

AW: Netzwerkstatus ermitteln

  Alt 22. Dez 2013, 16:30
http://www.delphipraxis.net/847172-post7.html
Mit GetAdaptersAddresses() lassen sich alle möglichen Informationen über Netzwerkadapter auslesen.
fork me on Github
  Mit Zitat antworten Zitat
r2c2

Registriert seit: 9. Mai 2005
Ort: Nordbaden
925 Beiträge
 
#3

AW: Netzwerkstatus ermitteln

  Alt 22. Dez 2013, 16:31
- 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
Kaum macht man's richtig, schon klappts!
  Mit Zitat antworten Zitat
tdroese

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

AW: Netzwerkstatus ermitteln

  Alt 22. Dez 2013, 21:13
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:23 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