AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Indy UDP macht mich noch wahnsinnig
Thema durchsuchen
Ansicht
Themen-Optionen

Indy UDP macht mich noch wahnsinnig

Ein Thema von Marco Steinebach · begonnen am 25. Feb 2016 · letzter Beitrag vom 13. Mär 2016
Antwort Antwort
Seite 1 von 2  1 2      
Marco Steinebach

Registriert seit: 4. Aug 2006
491 Beiträge
 
Delphi 5 Enterprise
 
#1

Indy UDP macht mich noch wahnsinnig

  Alt 25. Feb 2016, 16:15
Hallo zusammen,
indy 10_5343 (also neuestes build)
Ich hab einen UDPServer
Delphi-Quellcode:
  arUDPServer := TIdUDPServer.create;
  arUDPServer.defaultPort := arPort+1; // ist 'ne konstante
  arUDPServer.BroadcastEnabled := true;
  arUDPServer.onUDPRead := arUDPServerUDPRead;
  arUDPServer.active := true;
Die UDPRead-Prozedur lautet schlicht:
Delphi-Quellcode:
procedure TMainForm.arUDPServerUDPRead (
  AThread: TIdUDPListenerThread; const AData: TIdBytes; ABinding: TIdSocketHandle);
begin
  infobox (format ('%s hat %s geschrieben.', [aBinding.peerIP, bytesToString (aData)]));
end;
Bleibt zum schluß noch ein
  arUDPServer.Broadcast ('Just a test', arPort+1); Dieses Programm lasse ich auf zwei rechnern laufen.
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
Marco Steinebach
  Mit Zitat antworten Zitat
Bambini
(Gast)

n/a Beiträge
 
#2

AW: Indy UDP macht mich noch wahnsinnig

  Alt 25. Feb 2016, 16:26
Die UDPRead-Prozedur lautet schlicht:
Delphi-Quellcode:
procedure TMainForm.arUDPServerUDPRead (
  AThread: TIdUDPListenerThread; const AData: TIdBytes; ABinding: TIdSocketHandle);
begin
  infobox (format ('%s hat %s geschrieben.', [aBinding.peerIP, bytesToString (aData)]));
end;
Achtung: das arUDPServerUDPRead() Event wird aus einem Thread gerufen. Hier keine UI Actionen ausführen.
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Indy UDP macht mich noch wahnsinnig

  Alt 25. Feb 2016, 16:27
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.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Indy UDP macht mich noch wahnsinnig

  Alt 25. Feb 2016, 16:34
Evtl. auch noch diesen Beitrag ansehen
http://www.delphipraxis.net/1209858-post3.html
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Marco Steinebach

Registriert seit: 4. Aug 2006
491 Beiträge
 
Delphi 5 Enterprise
 
#5

AW: Indy UDP macht mich noch wahnsinnig

  Alt 25. Feb 2016, 16:40
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
Marco Steinebach
  Mit Zitat antworten Zitat
Bambini
(Gast)

n/a Beiträge
 
#6

AW: Indy UDP macht mich noch wahnsinnig

  Alt 25. Feb 2016, 16:49
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.
  Mit Zitat antworten Zitat
Benutzerbild von Valle
Valle

Registriert seit: 26. Dez 2005
Ort: Karlsruhe
1.223 Beiträge
 
#7

AW: Indy UDP macht mich noch wahnsinnig

  Alt 25. Feb 2016, 18:28
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.
Valentin Voigt
BOFH excuse #423: „It's not RFC-822 compliant.“
Mein total langweiliger Blog
  Mit Zitat antworten Zitat
Marco Steinebach

Registriert seit: 4. Aug 2006
491 Beiträge
 
Delphi 5 Enterprise
 
#8

AW: Indy UDP macht mich noch wahnsinnig

  Alt 25. Feb 2016, 20:39
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
Angehängte Dateien
Dateityp: zip TestUDP.zip (199,6 KB, 38x aufgerufen)
Marco Steinebach
  Mit Zitat antworten Zitat
Marco Steinebach

Registriert seit: 4. Aug 2006
491 Beiträge
 
Delphi 5 Enterprise
 
#9

AW: Indy UDP macht mich noch wahnsinnig

  Alt 11. Mär 2016, 13:52
Huhu, will das niemand mal ausprobieren?
Marco Steinebach
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#10

AW: Indy UDP macht mich noch wahnsinnig

  Alt 11. Mär 2016, 16:11
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?
Üblicherweise benutzt man eine Sequenznummer anstelle der ganzen Nachricht
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:37 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