Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Überprüfen ob Server noch da ist (https://www.delphipraxis.net/52525-ueberpruefen-ob-server-noch-da-ist.html)

Overburn 30. Aug 2005 12:53


Überprüfen ob Server noch da ist
 
Hallo!
Ich bin gerade total am verzweifeln bei folgendem Problem.
Ich habe einen Server. Es besteht die Vermutung, das die Verbindung zum Server immer nur ganz kurz (max. 1 Sec, wahrscheinlich aber mit Millisekundenbereich) unterbochen ist. Um das zu überprüfen möchte ich in Delphi ein Programm schreiben, welches anzeigt, wenn der Server nicht mehr da ist. Ansätze mit den Indy-Komponenten oder mit Portscans haben nichts gebracht, da es die Komponenten entweder nicht mitbekommen, oder die Auslastung zu hoch war. Achso dieser Thread hat auch nichts gebracht. Habt ihr vielleicht weitere Vorschläge? Begebe mich jetzt mal weiter in die tiefen des Webs, vielleicht find ich ja was.

Gruß,
Overburn

shmia 30. Aug 2005 13:30

Re: Überprüfen ob Server noch da ist
 
Du könntest den TCP Port "Echo" (=7) öffnen.
Du sendest deine aktuelle Uhrzeit und empfängst sofort das Echo.
Delphi-Quellcode:
var jetzt : TDateTime;
begin
  jetzt := SysUtils.Now;
  // Uhrzeit binär senden, Umwandlung in einen String nicht notwendig
  sendestream.WriteBuffer(jetzt, sizeof(jetzt)); // 8 Bytes
Wenn du das Echo empfangen hast, dann wird die Differenzzeit ausgerechnet und angezeigt.
Sollte die Differenzzeit über einem best. Limit liegen, dann hast du ein Verbindungsproblem.

Das gleiche Spielchen lässt sich auch über UDP durchführen.
Im Internet werden wahrscheinlich einige UDP Pakete verloren gehen.

Overburn 31. Aug 2005 10:47

Re: Überprüfen ob Server noch da ist
 
Moin!

Hier nochmal die genaue Aufgabenstellung:
Ich soll zwei Anwendungen bauen. Einen Client und einen Server. Der Client soll eine Verbindung mit dem Server aufbauen. Da diese permanent sein soll, muss ich TCP/IP einsetzen. Jetzt kann es sein, das irgendwo in dem Netzwerk wo der Server steht ein physikalischer Fehler im Netzwerk auftritt, der da aber nur für ein paar Millisekunden besteht. In diesem Netzwerk hängen mehere Regler, die alle mit UDP zu einem Rechner verbunden sind. Jeder kleinste Verbindungsabbruch macht sich da schon bemerkbar, da sie permanent mit dem Rechner in Kontakt stehen sollen. Meine Aufgabe ist es jett, wie schon erwähnt, über ein CLient/Server-Tool herauszufinden, wann und wie lange diese Störung besteht. Habe an Komponenten INDY, InternetPro und noch andere auf WinSocks aufbauende eingesezt. Aber alle bekommen es nicht mit, wenn z.B. am Server das Netzwerkkabel gezogen wird. Genau diesen Moment möchte ich aber gerne abpassen. Ist das überhaupt möglich?

Gruß,
Overburn

Basilikum 31. Aug 2005 11:23

Re: Überprüfen ob Server noch da ist
 
wenn es "nur" darum geht, zu prüfen, ob die Netzwerkstrecke zwischen Client und Server noch steht, würde ich anstelle von TCP (das einem relativ weit vom Netzwerk abkapselt) ICMP verwenden (Ping)... für reines Pingen brauchst du auch keine Server-Software, da dieser Teil bereits der IP-Stack (im OS) übernimmt...
jede Sekunde ein Ping-Request absetzen; wenn nicht innert nützlicher Frist (bei Ethernet innert Millisekunden) ein Ping-Response eintrifft, ist die Strecke down.

PS: mit TCP wirst du kurze Unterbrüche nicht mitbekommen, da das Protokol per Definition ein nicht bestätigtes Paket mehrmals wiederholt, bis dann irgendwann (z.T. bis Minuten) aufgegeben wird.

Overburn 5. Sep 2005 10:11

Re: Überprüfen ob Server noch da ist
 
Hallo!
Mir ist da ne weitere Idee gekommen:
Und zwar, sollte ein Datenpaket nicht ankommen, muss ja TCP veranlassen, das dieses neu gesandt wird. Diesen Moment könnte man ja abpassen und als Indiz dafür nehmen, das der Zielrechner nicht mehr mit dem Netzwerk verbunden ist.
Was haltet ihr davon?
Gruß,
Overburn

supermuckl 5. Sep 2005 10:20

Re: Überprüfen ob Server noch da ist
 
joa gute idee. du kannst den tcp stack auslesen, wo dir die errors usw angezeigt werden
mit iphlpapi kannst du das machen (einfach mal in der DP suchen)

so würde ich einfach ne TCP verbindung aufbauen und dauerhaft in einer schleife daten senden, die auf der gegenstelle einfach ins nichts führen. bei einem fehlerhaft übertragenen paket (oder neu angeforderten) sollte das dann den fehlercounter o.ä. hochzählen.

denke mal das müsste tun :)

supermuckl 5. Sep 2005 11:04

Re: Überprüfen ob Server noch da ist
 
Liste der Anhänge anzeigen (Anzahl: 1)
Man siehe dazu folgende MSDN seite:

http://msdn.microsoft.com/library/de...b_tcpstats.asp

Die die IPHLP-API Statistik Werte erklärt.

und dort beachte man folgendes:

dwRetransSegs
Specifies the number of segments retransmitted.

-> genau das richtige.

Für Delphi hab ich nun die IPHLP-API .pas angehängt, incl demo programme womit man das dann auslesen könnte.

Overburn 5. Sep 2005 12:04

Re: Überprüfen ob Server noch da ist
 
Hallo Supermuckl!
Danke für deine Hilfe! :-)

Gruß,
Overburn


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