Autor Beitrag
Overburn
Hält's aus hier
Beiträge: 5



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 74

Win xp
D7 ET
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Di 30.08.05 14:45 
Hallo!
Hast du zufällig etwas Beispielcode?

Gruß,
Overburn
TM
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 74

Win xp
D7 ET
BeitragVerfasst: 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:
ausblenden Delphi-Quelltext
1:
Sendtext('Noch da?');					


und im Server.onclientread(oder wie auch immer das bei indys heißt)
ausblenden Delphi-Quelltext
1:
if receivetext='Noch da?' then sende('ja');					


und im Client.onclientread oder so
ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mi 31.08.05 11:24 
Moin!

user profile iconOverburn 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... :roll:

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? :wink:

user profile iconOverburn 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 443

Gentoo Linux, MacOS X, Win 2000
D5 Ent, D7 Ent, Lazarus, Anjuta, MonoDevelop
BeitragVerfasst: Mi 31.08.05 11:27 
user profile iconNarses hat folgendes geschrieben:
user profile iconOverburn 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 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mi 31.08.05 12:06 
Moin!

user profile iconOverburn 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).

user profile iconOverburn 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... :gruebel:

user profile iconOverburn 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...

user profile iconOverburn 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 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 05.09.05 11:56 
Moin!

user profile iconOverburn 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. :roll:

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38


D3 Prof
BeitragVerfasst: 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:
Suche in: Delphi-Forum, Delphi-Library SHELLEXCECUTE

Gruss
sisc
:roll: :roll: :roll:
Zitat:
A progger makes coffee to code!
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: 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 Suche in: Delphi-Forum, Delphi-Library SHELLEXECUTE einbinden :wink:

EDIT: oh steht ja direkt über mir schonmal, sry :lol:
Jakane
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 257



BeitragVerfasst: Di 27.09.11 10:03 
Ich brauch genau das selbe Programm, gibt es einen fertigen Code oder das Programm zum downloaden? :>
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Di 27.09.11 11:35 
Moin!

user profile iconJakane hat folgendes geschrieben Zum zitierten Posting springen:
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... :P

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
avoid
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
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)
BeitragVerfasst: 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