Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi UDP-Protokolle laufen nicht mehr ein, wenn ein Rechner ausfä (https://www.delphipraxis.net/69951-udp-protokolle-laufen-nicht-mehr-ein-wenn-ein-rechner-ausfae.html)

torud 22. Mai 2006 20:11


UDP-Protokolle laufen nicht mehr ein, wenn ein Rechner ausfä
 
Hallo Wissende,

ich habe folgendes Problem.

In einem lokalen Netzwerk von 12 oder mehr Rechnern gibt es einen SQL-Server, der bei Änderungen XML-Strings verteilt, welche die Clients per UDP erhalten und in ihrer Anzeige (TWebbrowser) aktualisieren. Das Ganze funktioniert ganz gut.

Das Problem besteht darin, dass es vorkommt, dass ein oder mehrere Rechner auf einmal keine Protokolle mehr verarbeiten, weil scheinbar die UDP-Komponente inaktiv ist. Ich habe folgendes eingestellt. Port ist 8091 und HOST 255.255.255.255. Die Property Activ steht schon bei Start auf True. Ich vermute, dass es auch zu Problemen kommt, wenn das Programm gestartet wird und Protokolle einlaufen.

Scheinbar ist das Problem so gravierend, dass davon auch andere Rechner betroffen sind, die bis zu diesem Zeitpunkt keine Probleme hatten.

Wenn das der Fall ist, kommt es vor, dass dann gleich mehrere Rechner das Protokoll nicht mehr verarbeiten. Ich habe an meiner Hauptverwaltungsapplikation auch einen Button eingerichtet, der einen String per UDP sendet, welcher die Clients dazu auffordert selbst eine Nachricht per UDP zu senden und der Hauptapplikation ihren Rechnernamen mitzuteilen. Nach dem Ausfall eines Clients waren von vormals 12 Clients nur noch 3 in der Lage ihren Namen zu senden. Die Clients senden auf dem Port 8090, also einem eigenen Port.

Nun meine Fragen.
Wie kann ich dieses Problem umgehen/lösen?
Macht es Sinn Active := True erst bei OnShow der Applikation zu setzen?
Kann es sein, dass ein Rechner gleich mehrere Rechner mit "runter reisst"?
Gibt es Ports, die besonders "stabil" sind?
Was kann sonst noch die Ursache für das hier vorliegende Problem sein?

torud 23. Mai 2006 14:55

Re: UDP-Protokolle laufen nicht mehr ein, wenn ein Rechner a
 
Also da ich noch keine Antwort erhalten habe, werde ich mal schildern, was ich nun getan habe, um das Problem einzugrenzen und zu minimieren.

Der UDPServer wird erst 3 Sekunden nach dem OnShow des Hauptformulares Active:=True gesetzt. Damit will ich erreichen oder sicherstellen, dass einlaufende Protokolle die UDP-Komponente nicht direkt beim Start "deaktiviert".

Heute war also wieder ein grosser Livetest und 9 Clients liefen ca. 2 Stunden stabil und haben die verarbeiteten Daten ordentlich verarbeitet. Leider stieg dann irgendwann der erste Client aus, erhält also keine Daten mehr. Und direkt danach stieg der nächste aus. Zur Zeit sind nach 3 Stunden nur 7 da.

Wie würdet Ihr das lösen?

Soll ich vielleicht nen Timer einbauen, der 1 mal pro Minute den Aktivitätszustand prüft und notfalls die Komponente wieder aktiviert? Aber auf der anderen Seite muss es ja einen Grund haben, dass die Dinger immer wieder mal gern offline gehen.

Wird die Komponente vielleicht deaktiviert, wenn der DatenString zu gross ist, oder wird das nur der Überschuss abgeschnitten??

Ich würde mich über hilfreiche Kommentare freuen...

inherited 23. Mai 2006 15:00

Re: UDP-Protokolle laufen nicht mehr ein, wenn ein Rechner a
 
Hi,
Wenn das keine Ultraschnellen Verbindungen sein sollen, würd ich das ganze noch einmal mit TCP neu auflegen/ändern.
Bei TCP wird sichergestellt das Pakete auch ankommen.
Zudem solltest du das nicht mit OnSHow lösen, da dieses beim Programmstart u.U. mehrmals ausgefürt wird.

So far,
inh3r1ted

torud 23. Mai 2006 15:06

Re: UDP-Protokolle laufen nicht mehr ein, wenn ein Rechner a
 
Das Problem ist, dass ich hier vor Ort nicht mehr kurzfristig auf TCP umstellen kann...

inherited 23. Mai 2006 15:13

Re: UDP-Protokolle laufen nicht mehr ein, wenn ein Rechner a
 
Des is blöd.
Ich würde erstmal sichergehen das sie überhaup non-active sind, indem du mit einem timer dies überprüfst.
Nimmst du Indy-UDP oder die Sockets? Wenn Indy, welche Version, 9 oder 10

torud 23. Mai 2006 15:27

Re: UDP-Protokolle laufen nicht mehr ein, wenn ein Rechner a
 
Danke für Deine Antwort.

Ja, ich nehme die UDPClient und UDPServer von Indy. Wenn es läuft ist wirklich alles prima und falls mal EIN Protokoll nicht ankommt, ist das nicht so wild, aber das die Dinger gar nichts mehr machen, ist unschön. Ich werde auf jeden fall mal einen Timer den Zustand überprüfen lassen und schreibe mir mal bei OnClose den Zusatand in eine Ini, um sehen zu können, ob es wirklich daran liegt.

Noch einen Vorschlag?

Ich habe auch die Freeze von Indy mit drauf, weiss aber nicht genau, was die eigentlich tun soll....

inherited 23. Mai 2006 15:30

Re: UDP-Protokolle laufen nicht mehr ein, wenn ein Rechner a
 
Du meinst Anti-Freeze ;)
Schau mal in die Hilfe, da stehts.
Ich würde auch noch überprüfen wie weit/unweit die pakete kommen.

torud 23. Mai 2006 15:32

Re: UDP-Protokolle laufen nicht mehr ein, wenn ein Rechner a
 
Zitat:

Zitat von inherited
Du meinst Anti-Freeze ;)
Schau mal in die Hilfe, da stehts.
Ich würde auch noch überprüfen wie weit/unweit die pakete kommen.

Werde ich tun. Aber wie meinst Du das mit dem wie weit sie kommen???

inherited 23. Mai 2006 15:43

Re: UDP-Protokolle laufen nicht mehr ein, wenn ein Rechner a
 
Ob sie tatsächlich verschickt werden, dann ob sie esbis zum anderen pc schaffen nur möglicherweise vom udp ignoriert da er vllt non-active ist

torud 23. Mai 2006 15:53

Re: UDP-Protokolle laufen nicht mehr ein, wenn ein Rechner a
 
Naja ich habe ja an meinem Verwealtungstool einen Client und einen Server und mit dem Client sende ich die Daten. Ich kann auch nen String schicken, der den Empfänger dazu zwingt dem Verwaltungstool einen String mit seinem PCNamen zu senden. Die empfengenen Namen trage ich dann in eine Listbox ein. Dadurch weiss ich, welcher Rechner noch per UDP kommuniziert und welcher nicht. Meinstest Du das vielleicht?

inherited 23. Mai 2006 16:07

Re: UDP-Protokolle laufen nicht mehr ein, wenn ein Rechner a
 
Und der Server sendet garnichts?
Wie regelst du das mit der Kommunikations, steuerst du die Clients via deren IP-Adressen an?
Möglicherweise liegt das Problem daran, das sich die IP-Adresse spätestens alle 24 stunden ändert

torud 23. Mai 2006 16:27

Re: UDP-Protokolle laufen nicht mehr ein, wenn ein Rechner a
 
Also nochmal ausführlicher:

Verwaltungsprogramm (welches die Inhalte an die Clients sendet)
besitzt:

UDPClient (zum senden der Inhalte)
UDP Server (zum eventuellen Empfang der ClientNamen)

Clientrechner
besitzt

UDPClient (zum Senden des PCNamen)
UDP Server (zum Empfang aller Nachrichten und Inhalte)

---------------------------------------------------

Verwaltungsprogramm sendet einen String als Stringarray

Delphi-Quellcode:
SendMessage('UpdateSSP$$' + SSPContent);
---------------------------------------------------

Client erhält den String und splittet ihn bei $$

Wenn Strings[0], wie hier im Beispiel = UpdateSSP ist, weiss das Tool, was es zu tun hat. Steht da aber SendPCName, sendet der Client per UdpClient an das VerwaltungsTool seinen Namen. Mehr nicht. Das funzt ja auch alles ganz toll, aber leider scheint die UDPServer-Komponente an den Clients, welche die Daten ja empfängt, gern mal abzuschmieren.

Alle Clients verhalten sich immer gleich, weshalb ich sie nicht steuern muss. Sie tun es einfach selbst, wenn denn Daten ankommen, bzw. wenn die UDPServer aktiv ist, was hier das Problem zu sein scheint. Mit der Ip der Clients stelle ich gar nix an, noch nicht.

inherited 23. Mai 2006 16:52

Re: UDP-Protokolle laufen nicht mehr ein, wenn ein Rechner a
 
Laufen server und client auf dem selben port?

torud 23. Mai 2006 16:54

Re: UDP-Protokolle laufen nicht mehr ein, wenn ein Rechner a
 
Nein, das ist natürlich abgestimmt. Es funktioniert ja auch in der Masse. Daran kanns also nicht liegen.

franktron 23. Mai 2006 17:08

Re: UDP-Protokolle laufen nicht mehr ein, wenn ein Rechner a
 
Habt ihr vieleicht einen DHCP Server laufen wenn ja is das ein Windows Server oder ein Router.

torud 23. Mai 2006 17:36

Re: UDP-Protokolle laufen nicht mehr ein, wenn ein Rechner a
 
Hm, interessante Frage, aber wir haben bei uns keinen DHCP-Server laufen. Jeder Rechner hat seine eigene zugewiesene IP.

Ich bin nun an dem Punkt, wo ich nicht mehr weiter weiss, denn ich hatte eben den Fall, das ein Rechner nicht mehr auf eingehende Protokolle reagiert hat. Ich habe dann das Programm beendet und in die Ini geschaut. UDPServer und UDPClient waren zum Zeitpunkt des Programmendes aktiv. Dann wird mir wohl auch ein Timer nix nützen, der den Zustand der beiden Komponenten überprüft und notfalls aktiviert.

Noch irgendwelche Ideen oder Vorschläge?

shmia 23. Mai 2006 18:36

Re: UDP-Protokolle laufen nicht mehr ein, wenn ein Rechner a
 
Sendest du wirklich auf die richtige Broadcast-IP?
Wenn deine SubNetzMask z.B. 255.255.255.0 ist und deine IP-Adresse wäre 10.2.2.120,
dann müsstest du auf 10.2.2.255 senden, um alle Rechner in deinem Netzwerksegment zu erreichen.
Sind alle Rechner im gleichen Segment oder gibt es da einen Router, der UDP weiterleitet?

inherited 23. Mai 2006 19:00

Re: UDP-Protokolle laufen nicht mehr ein, wenn ein Rechner a
 
Hast du mal probiert ob es wieder funktioniert wenn du, nachdem er streik via eines buttons den zustand auf inaktiv und anchließend wiedr auf aktiv zu setzen?

torud 23. Mai 2006 19:02

Re: UDP-Protokolle laufen nicht mehr ein, wenn ein Rechner a
 
Hallo Shmia,

Zitat:

Zitat von shmia
Sendest du wirklich auf die richtige Broadcast-IP?
Wenn deine SubNetzMask z.B. 255.255.255.0 ist und deine IP-Adresse wäre 10.2.2.120,
dann müsstest du auf 10.2.2.255 senden, um alle Rechner in deinem Netzwerksegment zu erreichen.
Sind alle Rechner im gleichen Segment oder gibt es da einen Router, der UDP weiterleitet?

Also Broadcast it True und ich sende auf 255.255.255.255. Damit, so diverser Forenberichte erreicht man alle.

Netzwerksegmenttechnisch haben aber alle Clients eine IP in diesem Bereich: 192.168.2.x. Die Clients haben ein eigenes Netzwerk und nur der "Server" kommt noch in ein anderes Netzwerk.

Demnach müsste ich auf 192.168.2.255 senden!?

Aber was macht das besserer und/oder sicherer und vor allem stabiler.

Ich frage nicht kritisch, nur neugierig, denn ich versteh die Welt nicht mehr, wenn es daran liegen sollte. Ich bin dankbar für jeden Tipp und werde das hier auf jeden Fall ausprobieren.

torud 23. Mai 2006 19:05

Re: UDP-Protokolle laufen nicht mehr ein, wenn ein Rechner a
 
Zitat:

Zitat von inherited
Hast du mal probiert ob es wieder funktioniert wenn du, nachdem er streik via eines buttons den zustand auf inaktiv und anchließend wiedr auf aktiv zu setzen?

Hm, dass ist schwer, denn die Oberfläche besteht eigentlich nur aus dem Webbrowser, aber ich werde mal testhalber nen Timer mit einbauen und auch einen Button, der mal die Aktivität der Komponente deaktiviert und nach einem kurzen Sleep wieder aktiviert.

EDIT: Nach nun 10-stündigem Dauerbetrieb sind von anfangs 9 Clients nur noch 5 "OnAir". Normal ist das nicht, aber gestern waren nach 2 Stunden schon alle Clients weg.

franktron 23. Mai 2006 19:25

Re: UDP-Protokolle laufen nicht mehr ein, wenn ein Rechner a
 
Also das hört sich so an als würde der UDPClient irgenwie aussetzen.

Ich hatte das mal mit dem TCPClient und bei mir wahr das das die Netztwerkkarte irgendwann in den Energiesparmodus geschlatet hat,
nachdem ich das in der Netzwerkkarte abschaltet hatte wahr das weg.

torud 23. Mai 2006 19:29

Re: UDP-Protokolle laufen nicht mehr ein, wenn ein Rechner a
 
Um Gottes Willen. Das fehlte mir gerade noch. Naja aber die Karte schläft doch nur ein, wenn kein Traffic ist...Oder? Wir haben hier maximal ne Pause von 20 Minuten. Ansonsten herscht in dem Netzwerk Dauerbetrieb. Ist aber ein Interessanter Ansatz.

markusj 23. Mai 2006 20:26

Re: UDP-Protokolle laufen nicht mehr ein, wenn ein Rechner a
 
Ich würde mal den gesamten Netzwerkverkehr mit Ethereal sniffen ... dazu muss die Infrastruktur über einen Hub laufen, oder du verwendest Cain und ARP-Spoofing damit alle Daten über einen bestimmten PC laufen (könnte das Ergebnis verfälschen) ...
Dann kannst du kontrollieren, ob die Pakete ins Netz rausgehen, und ob eine Antwort kommt und nur nicht verarbeitet wird ...
Evtl. richtest du noch ein, dass bei erhalt einer Nachricht eine Message an den Absender geschickt wird ... dann siehst du beim Sniffen gelich, auf wessen Seite die Antwort fehlt.

mfG

Markus

torud 24. Mai 2006 11:30

Re: UDP-Protokolle laufen nicht mehr ein, wenn ein Rechner a
 
Puh Sniffen und Etheral lese ich heute zum erstenmal. Aber selbst wenn ich weiss, welcher Client nicht mehr reagiert bringt mich das doch nur bedingt weiter, weil die Komponente selbst ja aktiv zu sein scheint. Wie soll ich darauf reagieren?

Ich habe da 2 Ansätze:

1. Ich lass ein Extra-Tool mitlaufen, welches per UDP-Befehl die Client-Software restartet. Dies setzt natürlich voraus, dass dieses Tool auch auf das UDP-Protokoll anspringt und sich nicht auch noch aufhängt... :wink:

2. Ich gehe persönlich zu dem Client und reboote ihn...

Ist beides nicht so prall oder?

Ich habe leider nicht viel Ahnung vom Sniffen etc...Ich kann natürlich ein Tool mitlaufen lassen, welches alles protokolliert, aber ich zeichne ja schon am Haupttool den Ausgang komplett mit. Dat Ding is stabil und wie schon erwähnt - Gestern abend liefen nach 12 Stunden noch 4 von 9. Es funzt also grundsätzlich, ist aber sehr unstabil. Steigt ein Client einmal aus, dann auch für immer bis zur Termination...

markusj 24. Mai 2006 11:57

Re: UDP-Protokolle laufen nicht mehr ein, wenn ein Rechner a
 
Ein Sniffer ist ein Programm, welches den Netzwerkverkehr mitschneidet ...
Das hat folgenden Vorteil ... du kannst zurzeit nicht garantieren, dass die Nachrichtenpackete bei den Clients angekommen sind ... mit einem Sniffenden PC kannst du verfolgen, welche Datenpackete von Wo nache Wo gehen ...
Dann hast du den Beleg, dass die Daten am Ziel ankommen ... es könnte genausogut sein, dass sich dein Server verschluckt und die Daten gar nicht rausgehen ...
Das Problem ist, dass dein Haupttol ja evtl. einen Fehler macht ... deshalb ist eine unabhängige und sicher Funktionierende kontrolle praktisch.

mfG

Markus

torud 24. Mai 2006 12:14

Re: UDP-Protokolle laufen nicht mehr ein, wenn ein Rechner a
 
Zitat:

Zitat von markusj
Ein Sniffer ist ein Programm, welches den Netzwerkverkehr mitschneidet ...
Das hat folgenden Vorteil ... du kannst zurzeit nicht garantieren, dass die Nachrichtenpackete bei den Clients angekommen sind ... mit einem Sniffenden PC kannst du verfolgen, welche Datenpackete von Wo nache Wo gehen ...
Dann hast du den Beleg, dass die Daten am Ziel ankommen ... es könnte genausogut sein, dass sich dein Server verschluckt und die Daten gar nicht rausgehen ...
Das Problem ist, dass dein Haupttol ja evtl. einen Fehler macht ... deshalb ist eine unabhängige und sicher Funktionierende kontrolle praktisch.

Ok, das macht Sinn, aber wie erklärst Du, dass immerhin 4 von 9 komplett durchliefen? Da kann doch also kein Fehler beim SendeProgramm vorliegen, bzw. sich der Server nicht verschluckt haben. Sicher ist hier und da mal ein Packet verloren gegangen, aber das ist bei einem LiveScore nicht SO wild. Komisch ist eben, dass die anderen 5 einfach ausgestiegen sind. Ich will damit nicht Deine Antwort in Frage stellen, verstehe es nur von der Logik her nicht, dass 4 durchlaufen und 5 eben nicht. Für mich kann es da "eigentlich" keine gravierenden Fehler in meinen Tools geben...

Aber da ich ja weiss, welche Clients nicht mehr laufen, kann ich vielleicht VIA Netzwerk die Applikation beenden und neu starten??? Das würde mir schon sehr weiterhelfen. Ginge das?

Ich weiss neue Frage - neuer Thread, aber in diesem Fall hängt das irgendwie zusammen...

markusj 24. Mai 2006 12:22

Re: UDP-Protokolle laufen nicht mehr ein, wenn ein Rechner a
 
Dazu bräuchtest du aber eine ständig offen Verbindung, bevorzugt über TCP, um sicherzustellen, dass der CLient reagiert ...
Und wegen dem Sniffer ... ich hab keine Ahnung, wie das UDP-Protokoll genau aufgebaut ist, vielleicht verschluckt sich der Client an einer Überschneidung zwischen senden und empfangen oder so ... ich kenne mich nich so gut auf diesem Gebiet aus ...
Vielleicht einfach bei den Clients alle ... 5 Min einen zweiten Sender/Empfänger starten, und dann den alten Auflösen ...

mfG

Markus

torud 24. Mai 2006 13:24

Re: UDP-Protokolle laufen nicht mehr ein, wenn ein Rechner a
 
Ich schau mal, wie ich das lösen kann...

BTW. Seit 2,5 Stunden läuft alles stabil...keiner ausgestiegen...


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:25 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz