![]() |
Indy UDP macht mich noch wahnsinnig
Hallo zusammen,
indy 10_5343 (also neuestes build) Ich hab einen UDPServer
Delphi-Quellcode:
Die UDPRead-Prozedur lautet schlicht:
arUDPServer := TIdUDPServer.create;
arUDPServer.defaultPort := arPort+1; // ist 'ne konstante arUDPServer.BroadcastEnabled := true; arUDPServer.onUDPRead := arUDPServerUDPRead; arUDPServer.active := true;
Delphi-Quellcode:
Bleibt zum schluß noch ein
procedure TMainForm.arUDPServerUDPRead (
AThread: TIdUDPListenerThread; const AData: TIdBytes; ABinding: TIdSocketHandle); begin infobox (format ('%s hat %s geschrieben.', [aBinding.peerIP, bytesToString (aData)])); end;
Delphi-Quellcode:
Dieses Programm lasse ich auf zwei rechnern laufen.
arUDPServer.Broadcast ('Just a test', arPort+1);
Setze ich bei Rechner1 den Broadcast ab, bekommt dieser, da ja der Server auch sendet, seinen eigenen Broadcast, ich kriege also die Messagebox angezeigt, so weit, so gut. Rechner Nummer 2 bekommt den Broadcast auch, aber zweimal? Hääää? Bin ich schon bei diesem einfachen Beispiel zu blöd, oder was läuft hier falsch? Hiiiilfe! ;-) Nehme ich zum Senden einen UDPClient, passiert das gleiche... Also Rechner 2 bekommt den Broadcast zweimal. Viele Grüße Marco |
AW: Indy UDP macht mich noch wahnsinnig
Zitat:
|
AW: Indy UDP macht mich noch wahnsinnig
Das ist ganz normales Verhalten von UDP.
Nachrichten können - gar nicht ankommen - in falscher Reihenfolge ankommen - mehrfach ankommen Nimm lieber TCP, wenn du nicht weißt, was du tust. Edit: Okay, habe gerade gesehen, dass es um Broadcasts geht. Dann geht das natürlich nicht. |
AW: Indy UDP macht mich noch wahnsinnig
|
AW: Indy UDP macht mich noch wahnsinnig
Hallo,
Erstmal vielen Dank! das UDP ein tolles? Protokoll ist, wußte ich ja schon... meine Güte, ich will doch nur wissen, wer alles da ist, und eine Rückantwort, dann geht's eh mit TCP weiter. Gibt's da ein Standard-Verfahren, oder muß ich mir ernsthaft alle Nachrichten, mitsamt IP, die der Server bekommt speichern und schauen ob das Nachrichten/IP-Paar schonmal da war, oder was? Ist das beknackt! Viele Grüße Marco |
AW: Indy UDP macht mich noch wahnsinnig
Ich löse das so, das jeder Client eine eigene GUID (wird beim start des Programmes erzeugt) hat und diese beim Antwortschicken mit sendet. Danach schaut man dann.
|
AW: Indy UDP macht mich noch wahnsinnig
Mh, aber eigentlich kann es nicht sein, dass du ständig alles doppelt bekommst. Das muss ein Fehler sein.
(Natürlich stellt UDP nicht sicher, dass es keine Duplikate gibt, aber das heißt ja nicht dass es ständig Duplikate gibt) Installier dir doch mal Wireshark und mach dich damit vertraut. Ein super Tool um mal zu schauen was tatsächlich im Netz abgeht. |
AW: Indy UDP macht mich noch wahnsinnig
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen,
den Beitrag von SirRufo schau ich mir gleich an, vielen Dank für den Link. Aber ich denke, Vallentin hat schon recht, daß kann ja nicht andauernd sein... Ich hab 'ne bitte: Angehängt ist ein kleines Projektchen, schlicht der Code von oben. Könnte das mal irgendwer, der zwei Rechner zur Verfügung hat, ausprobieren, ob die Nachrichten auf dem Rechner, der Empfängt, alle doppelt ankommen? Ich hab, ausnahmsweise, die EXE dringelassen, dann braucht ihr's nicht compilieren. Ich kann mir beim besten willen nicht vorstellen, daß in den Indy's ein Fehler drin ist, die UDP-Geschichten sind von 2004, gerade ich werde ja nicht der erste sein, dem das auffällt... Guckt mal jemand rein - bitte? Viele Grüße Marco |
AW: Indy UDP macht mich noch wahnsinnig
Huhu, will das niemand mal ausprobieren?
|
AW: Indy UDP macht mich noch wahnsinnig
Zitat:
In deinem Fall könnte man z.B. einen Timestamp des Senders nehmen und alle Nachrichten ignorieren, die vor der letzten empfangenen Nachricht gesendet wurden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:55 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