Autor |
Beitrag |
Overburn
Hält's aus hier
Beiträge: 5
|
Verfasst: Di 30.08.05 14:06
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
|
|
TM
      
Beiträge: 74
Win xp
D7 ET
|
Verfasst: Di 30.08.05 14:32
Hallo,
Ich hab das in meinem Fernwartungstool über tserversocket/tclientsocket so gamacht:
Client sendet Text an Server (zB: "noch da?").
Dieser reagiert darauf, indem er zB "ja" antwortet.
Und wenn der Client "ja" empfängt, schreibt er in ein Label, oder mssagebox, ... dass die Verbindung noch steht.
Die Anfrage vom Client könnte ja über einen Timer gesteuert sein, und du könntest zählen lassen, wie oft (=> wie lang) es funktioniert.
..
_________________ Dieser Beitrag enthält keine Schreibfehler.
Das sind versteckte Hinweise.
|
|
Overburn 
Hält's aus hier
Beiträge: 5
|
Verfasst: Di 30.08.05 14:45
Hallo!
Hast du zufällig etwas Beispielcode?
Gruß,
Overburn
|
|
TM
      
Beiträge: 74
Win xp
D7 ET
|
Verfasst: Di 30.08.05 19:08
Der Code würde dir nix bringen, weil er auf TSerersocket/TClientsocket basiert.
Mach halt ein Button, oder Timer mit dem Ereignis:
Delphi-Quelltext
und im Server.onclientread(oder wie auch immer das bei indys heißt)
Delphi-Quelltext 1:
| if receivetext='Noch da?' then sende('ja'); |
und im Client.onclientread oder so
Delphi-Quelltext 1:
| if receivetext='ja' then then memo1.lines.add(timetostr(now)+' Noch online'); |
Damit schreibt er im Clientfenster die Uhrzeiten, wo er noch online war ins Memo.
Genaueres kann ich dir auch net sagen, weil ich mich mit Indys net auskenn.
..
_________________ Dieser Beitrag enthält keine Schreibfehler.
Das sind versteckte Hinweise.
|
|
Overburn 
Hält's aus hier
Beiträge: 5
|
Verfasst: Mi 31.08.05 11:11
Hallo!
Das Problem an der Sache ist, das es nicht zyklisch sein soll. Am besten sollte der CLient es in dem Moment mitbekommen, indem die Verbindung unterbrochen wurde. Hab es schon mit Timer probiert, nur das lässt die Systemlast in die Höhe schießen.
Hat denn keiner eine Lösung?
Gruß,
Overburn
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mi 31.08.05 11:24
Moin!
Overburn hat folgendes geschrieben: | Hat denn keiner eine Lösung? |
Deine Fragestellung ist viel zu undifferenziert, um dir brauchbar helfen zu können. Stell deine Frage genauer, sonst kann man dir nicht helfen...
Was ist denn für dich ein Server? Ein Gerät oder ein Dienst? Willst du wissen, ob der auf einen Ping reagiert, willst du einen bestimmten Port auf Erreichbarkeit überwachen? Du redest von einer Verbindung, TCP oder UDP? Welche Komponenten setzt du ein? Hast du einen Überblick über die Arbeitsweise der WinSocks? Wer hat den Server programmiert? Standard-Dienst... usw, usf. Merkst du langsam, dass deine Infos etwas "dürftig" sind?
Overburn hat folgendes geschrieben: | Am besten sollte der CLient es in dem Moment mitbekommen, indem die Verbindung unterbrochen wurde. |
Wenn das eine TCP-Verbindung ist, dann wirst du den Timeout schon abwarten müssen, da führt kein gangbarer Weg dran vorbei, das ist ein Designmerkmal von TCP.
cu
Narses
|
|
Grendel
      
Beiträge: 443
Gentoo Linux, MacOS X, Win 2000
D5 Ent, D7 Ent, Lazarus, Anjuta, MonoDevelop
|
Verfasst: Mi 31.08.05 11:27
Narses hat folgendes geschrieben: | Overburn hat folgendes geschrieben: | Am besten sollte der CLient es in dem Moment mitbekommen, indem die Verbindung unterbrochen wurde. |
Wenn das eine TCP-Verbindung ist, dann wirst du den Timeout schon abwarten müssen, da führt kein gangbarer Weg dran vorbei, das ist ein Designmerkmal von TCP. |
So ist das.
Und wenn es UDP ist geht es garnicht, da UDP nicht verbindungsorientiert ist.
Bis neulich ...
|
|
Overburn 
Hält's aus hier
Beiträge: 5
|
Verfasst: Mi 31.08.05 11:47
Hallo!
@Narses: Wollte das Problem nur so allgemein wie möglich schildern.
Hier die 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
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mi 31.08.05 12:06
Moin!
Overburn hat folgendes geschrieben: | 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. |
UPD ist verbindungslos, das erkennt der Server ja nichtmal, es sei denn, es ist im Protokoll eine Möglichkeit dazu vorgesehen (Paket-Sequenznummern oder sowas).
Overburn hat folgendes geschrieben: |
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. |
Und was soll deine C/S-Anwendung da nun herausfinden? Das ist an der Stelle nutzlos...
Overburn hat folgendes geschrieben: | Meine Aufgabe ist es jett, wie schon erwähnt, über ein CLient/Server-Tool herauszufinden, wann und wie lange diese Störung besteht. |
Wenn diese Störung nicht im Sekundenbereich anzusiedeln ist, dann kannste das vergessen; Ethernet ist so konzipiert, dass es genau diese Störungen tolerienen soll...
Overburn hat folgendes geschrieben: | 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? |
Das kannste nur erkennen, wenn du eine physical-link-layer-Erkennung auf der Maschine einsetzt, in der die Netzwerkkarte steckt. Und selbst dann siehst du nur ggfs. die Verbindung zum Switchport.
Anders als mit Timeouts zu arbeiten wird da nicht möglich sein. Und das ist eben nicht wirklich echtzeit...
cu
Narses
|
|
Overburn 
Hält's aus hier
Beiträge: 5
|
Verfasst: Mo 05.09.05 11:15
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
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 05.09.05 11:56
Moin!
Overburn hat folgendes geschrieben: | 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? |
Nichts, weil die Ursache für die Wiederholung nicht eindeutig ist.
Wenn du unbedingt, aus welchen Gründen auch immer, irgendwas in dieser Richtung rausfinden willst, dann fällt mir nur eine praktikable Lösung ein, die aber dafür Bandbreite kostet:
- du brauchst eine UDP-Paketquelle, die, sagen wir in 60sec. Abstand, Pakete mit fortlaufender Nummer sendet
- der Empfänger kann aus der Information, dass Pakete fehlen (-> Sequenznummer fehlt) schließen, dass es zu diesem Zeitpunkt Probleme im Netz gab. Welche das waren, läßt sich so ohne weiteres nicht rausfinden, das UDP-Paket könnte ja auch nur wg. Überlast verloren gegangen sein, dass muss ja nicht immer ein Leitungsausfall sein.
Vielleicht mal zur Verdeutlichung: Du hast das Problem, dass dir ein toter Mann sagen soll, dass er tot ist... (Leitung ausgefallen -> per Leitung melden?)
cu
Narses
|
|
sisc
      
Beiträge: 38
D3 Prof
|
Verfasst: Mo 12.09.05 17:06
Vielleicht gibt es eine Möglichkeit Massenpings über die Kommandozeile abzugeben.
Ein Ping ist, denke ich, genau das, was du suchst. Er sendet eine kleine (auf kb bezogen) Anfrage an den Server und der antwortet, wenn er online ist.
Schema "ping <IP-Adresse>"
Du könntest die Kommandozeile über ShellExcecute öffnen und das Ergebnis dann abfangen. Frag mich aber nicht wie das mit ShellExcecute genau funktioniert.
Im Forum sollte es genügend Beispiele geben:
SHELLEXCECUTE
Gruss
sisc
Zitat: | A progger makes coffee to code! |
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mo 12.09.05 17:07
kann man net schnell ne kleine bat datei zum anpingen schreiben ? ich denke das ist am einfachsten, aber ich weiß nicht ob man da den gewünschten funktionsumfang mit erreicht, ansonsten mit SHELLEXECUTE einbinden
EDIT: oh steht ja direkt über mir schonmal, sry 
|
|
Jakane
      
Beiträge: 257
|
Verfasst: Di 27.09.11 10:03
Ich brauch genau das selbe Programm, gibt es einen fertigen Code oder das Programm zum downloaden? :>
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Di 27.09.11 11:35
Moin!
Jakane hat folgendes geschrieben : | Ich brauch genau das selbe Programm, gibt es einen fertigen Code oder das Programm zum downloaden? :> |
Das würde mich wundern, da ich die Überwachung eines Ethernets in Echtzeit inband für nicht machbar halte.  Du kannst vielleicht auf der Maschine selbst mit der physical-link-layer-Erkennung herausfinden, ob überhaupt die Möglichkeit besteht, Daten übertragen zu können, aber wie soll das Remote gehen? Wenn die Leitung weg ist, kann man das schlecht über diese nicht mehr vorhandene Verbindung melden...
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
avoid
      
Beiträge: 230
Erhaltene Danke: 4
MSDos, WinXP32, Win764, Win10, Android, Debian
msl (mIRC edit), html & php & Java (DreamweaverMX), Basic (picaxe PE6), C (Arduino IDE), C# (vs2010,2015,2017,2019,Unity,Android Studio)
|
Verfasst: So 03.06.12 17:32
auch wenn das thema schon ein par tage auf dem buckel hat möchte ich trotzdem
eine realisierbare lösung vorschlagen, wie ich sie schon mehrfach eingesetzt habe.
schreibt dir eine batchdatei in der du die ping.exe mit parameter -t in eine textdatei schreiben lässt.
nach ein oder zwei tagen kannst du dann die textdatei in excel importieren
und die spalte mit den ms(Milisekunden) in einem linien-diagramm darstellen lassen.
so kannst du (und unkundige kunden) deutlich sehen, zu welcher zeit probleme aufgetreten sind.
natürlich kann man daran nicht festmachen, woher die probleme kommen aber man kann nachweisen das sie bestehen.
so bleibt nur noch raus zu finden ob ein wackelkontak, überhitzung eines switch oder pure überlastung
durch zu viele daten der grund für die verbindungsabbrüche ist.
mit einer kleinen GUI in Delphi oder C# kann man so eine batch natürlich ersetzen und benutzerfreundlicher gestalten.
aber wer will seine arbeit schon in unkundige hände abgeben die dafür dann nichts zahlen. 
_________________ Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke
|
|
|