![]() |
UDP-Multicast Nachricht empfangen
Ich möchte gerne eine UDP-Multicast Nachricht empfangen.
Dazu hab ich mir einen IdIPMCastClient auf die From gepackt, den DefaultPort (4713), die Multicastgruppe (233.233.233.233) angegeben und lasse mir im OnIPMCastRead-Event der PeerIP und den Port der ankommenden Nachricht anzeigen. Senden tue ich das mit PacketReader oder einem ESP8266-WiFiModul .... da kommt nur nix ?! Warum nicht ? |
AW: UDP-Multicast Nachricht empfangen
.. ist da noch ein Router dazwischen?
Normalerweise lassen die Router per default keinen Multicast traffic durch. Mit Wireshark hast Du schon geschaut ob traffic ankommt? Grüße Klaus |
AW: UDP-Multicast Nachricht empfangen
Das spielt sich hier alles im Standard-IP-Bereich 192.168.178.x hinter meiner 7490er Box ab.
Ich hab 2 PC's (.55 + .50) und z.Zt. ein Arduino Modul ESP8266 (.40). Es sollen/können mal mehr ESP sein. Zum Testen benutze ich neben meinem Tool den "PaketSender" auch einen ESP8266 mit selbstgebautem Proggie in C (mit Arduino IDE) WireShark zeigt mir, das auch entsprechende Uni- wie auch Multicast-Pakete (230.230.230.230 - alle an Port 4711) verschickt werden. Der ESP empfängt und antwortet auch artig wie befohlen. Auf PC-Seite ist Unicast kein Problem - das mache ich mit IdUDPClient und IdUDPServer. Interesaant dabei ist: IdUDPClient.Broadcast('MULTICAST', 4711, '230.230.230.230'); verschickt anscheinend auch eine Multicastnachricht, die der ESP empfängt und versteht (weil er darauf korrekt antwortet). Multicast empfangen mit IdIPMCastServer (!) weigert sich bisher weiterhin. Das Ziel: Ein oder mehr PC sollen als Server mit 1-x ESP8266-Clienten per UDP kommunizieren. A) Master soll ein Multicast-Telegramm senden, und alle Clienten sollen eine Unicast-Telegramm als Antwort mit der eigenen IP an den Server senden - ähnlich dem Windows Discovery / Ping. Nur einfacher. B) Unicast's vom Server an einzelne Clienten, um diese zu steuern und deren Antwort zu erhalten. C) Clienten sollen dem Server je nach UDB-Typ (Multi/Uni) antworten. D) Clienten sollen selbst ein Multicast an den/Die Server senden, falls ein Event auftritt, sich diese an- oder abmelden (Hall, bin der neue / wieder da ... und Tschüss) |
AW: UDP-Multicast Nachricht empfangen
Sind da noch Switche involviert?
ggf. musst du per IGMP den Switch/Router davon überzeugen, dass du das Multicast haben willst. |
AW: UDP-Multicast Nachricht empfangen
Nein - hier steht nur eine Fritz-Box 7490 und da hängt alles per Draht oder Funk dran.
Der ESP versteht es ja, wenn ich vom PC sende. Der PC aber nicht, wenn der ESP oder ein anderer PC ein Muticast sendet. Es ist anscheinend also die Empfangsroutine, die streikt. |
AW: UDP-Multicast Nachricht empfangen
Hmm..
Pakete verschicken geht... Zeigt den WireShark auch eingehende Pakete auf dem PC an? Wenn nicht könnte hier die Firewall diese (eingehenden) blockieren.. |
AW: UDP-Multicast Nachricht empfangen
... ich bin da nicht so der Held beim Wireshark - aber ich sehe die (UDP) pakete die abgehen.
D.h., wenn ich hier am PC vom PaketSender ein MC an 230.230.230.230 verschicke ebenso das Antwortpaket vom ESP. Dito vom PC / mein Delphi Tool, wenn ich (vermeintlich) Multicast oder Unicast sende. Das Tool empfängt auch auch wenn es direkt an die IP geht - aber ein Multicast kommt da nicht an ?! Denke mal, das da die Firewall nix blockt. Hab mal beim Kaspersky reingeguckt, das ist nix entsprechendes blockiert. Ist das irgendwie eine Feinheit im Setup des IdIPMCastClient ? |
AW: UDP-Multicast Nachricht empfangen
Liste der Anhänge anzeigen (Anzahl: 1)
Hmm..
Anbei mal etwas zusammengeklimpert, konnte es aber nicht bei mir testen. Habe ein anderes Beispiel dafür verwendet.. (Delphi 6 mit Indy 10.6) Und was hat Kaspersky mit der Windows-Firewall zu tun? Gebe dort mal den Port 4713 für UDP als 'Eingehend' frei.. |
AW: UDP-Multicast Nachricht empfangen
Jetzt hab ich den Salat .....
Mit deinem Tool funzt das, nachdem ich die Ports 4710-4720 freigegeben. Mit meinem immer noch nicht grrrrr..... Du schrubtest Indy 10.6 - bei mir zeigts die Version 10.2.5. Ist wohl die org. Inst mit Delphi 2009 mit Dateien von 2008. Möglicherweise ein Versions-Problem ?! Also mal die neueste drauf mache .... hatte ich mir gedacht. Eine Version Indy10_5498 mit Datum von gestern gezogen, in Delphi alles nach Anleitung gelöscht und die FullD120.bat probiert. Denkste ! Das CMD endet mit einer kilometerlangen Liste von (Fehler-) Meldungen. Wass nu wieder los ? Ich hatte das vor Jahren schon mal - aber die Lösung des Drama's weiß ich nicht mehr. Liegts am Win 8 mit seinen Rechteproblemen oder eas ist das ??? |
AW: UDP-Multicast Nachricht empfangen
Hmm..
ich habe Indy 10 unter Delphi 6 (hat selber nur 9) gar nicht installiert, sondern einfach nur entpackt und die Verzeichnisse in den Suchverzeichnissen des Projektes hinterlegt. So kann ich Indy 10 ohne Inst verwenden... |
AW: UDP-Multicast Nachricht empfangen
Moin...8-)
[OT] Zitat:
[/OT] |
AW: UDP-Multicast Nachricht empfangen
Hmm...
[OT] Zitat:
Damit kann ich bisher alles machen, was ich brauchte. Ohne immer wieder Geld auszugeben für neue Versionen! Ohne Online-Zwang! Ohne dicke, fette EXE (ohne Mehrwert) zu erstellen! ... Und bitte jetzt NICHT SCHON WIEDER das Rumgebasche auf die alte Version und das ich UNBEDINGT auf die neueste 10x Community Edition hochgehen soll... Ich nutze D6 mit allen Möglichkeiten, welche damals noch die Professional geboten hat! (Incl. Datenbankanbindungen) Und nein ich habe noch nichts vermisst! [/OT] |
AW: UDP-Multicast Nachricht empfangen
Ein Mega-Paket DelphiWebThankYouBitCoins an HolgerX 8-)
Ich habe auch eine Ewigkeit mit D7 auf Win98 rumgemacht und bin gut damit ausgekommen. Wenn mann nicht zwingend irgendwelches neues API-Gedöns braucht, ist ein Umstieg auch nicht zwingend nötig - bei mir leider ja... So viel zum OT. Zwischenbericht: @HolgerX, es hat hier wie gesagt gefunzt. Ich teste hier grad noch rum und zeitnah meine Ergebnisse kund. So viel sei schon mal gesagt: Ich hab hier nun die aktuelle Indy 10.6.2.5498 von vorgestern am Start - da hat sich offensichtlich einiges zur org. Delphi-Inst aus 2008 geändert, was ich erst mal umsetzen und testen muss. EDIT- ÜBRIGENDS: Da Indy10 sicht nicht "automatisch per Fullxxx.bat installieren ließ und ich auch keine gescheite Lösung im WWW dazu gefunden habe, hab ich's eben manuell gemacht - was dann auch gefunzt hat. Heureka ! Dummerweise hatte ich nach einem viel späteren Windoof-Restart plötzlich keinen Desktop mehr ... DRAMA - KRISE ! Egal, auch (relativ einfach) gelöst und alles betreff Indy u. a. noch mal von vorne. |
AW: UDP-Multicast Nachricht empfangen
Zitat:
gruss |
AW: UDP-Multicast Nachricht empfangen
Ich hab mittlerweile festgestellt, dass der IdIPMCastClient sowohl UniCast als auch MultiCast empfängt.
Schon sehr schön - KOMMA ABER: ABinding liefert nur Daten zum Absender (dessen IP, Port) zurück - aber nicht eine mögliche MultiCast-IP, mit der man dann in der Empfangsroutine auswerten könnte, ob es sich um Multi- oder UniCast-Anruf handelt. Oder gibt's da noch nen Trick via übermitteltem Socket ? |
AW: UDP-Multicast Nachricht empfangen
Weitere Erkentnisse:
Es werden offensichtlich lokal (am selben Rechner) nur abgesendete Pakete an '127.0.0.1' erkannt. D.h. senden von -> an die eigene IP mittels PacketSender als Multi- oder UniCast wird nicht erkannt ?! Von externen PCs/ESP-Modulen klappt das hier allerdings wie erwähnt prima. |
AW: UDP-Multicast Nachricht empfangen
Zitat:
Das Paket kommt nur einmal an die Netzwerkkarte. Somit kann auch nur eine Software das Paket empfangen. Bei meiner Software BOMAC löse ich, dass Problem indem ich mich auf mehrere IPs binde, welche natürlich an der Netzwerkkarte eingestellt sein müssen. Allerdings sind das bei mir Broadcast-Pakete. |
AW: UDP-Multicast Nachricht empfangen
Liste der Anhänge anzeigen (Anzahl: 1)
Hmmm..
Zitat:
Die Bindung an einen Empfänger ist durch setzen eines Parameters auf dem Socket aufgehoben, deshalb auch Multicast... ;) Anbei mein überarbeitetes Test-Tool. Starte es mehrfach (+ Start Button) und Du kannst an allen gleichzeitig die Broadcast-Message empfangen.. |
AW: UDP-Multicast Nachricht empfangen
Ich bin da mittlerweile auch etwas weitergekommen.
Zum empfangen von Uni- und MultiCast hab ich einen IdIPMCastClient (als Empfänger) und einen IdUDPClient (als Sender) auf die Form gebappt. Im Objektinspektor jeweils dazu nichts geändert. Erforderliche Einstellungen dazu setze ich in der Form.OnCreate und zur Laufzeit.
Delphi-Quellcode:
Das funzt prima soweit - auch mit gleicher IP im Sender/Empfänger.
// Vorgaben setzen
IdIPMCastClient.ReuseSocket := rstrue; IdUDPClient.ReuseSocket := rstrue; cbb_MCGROUPChange(self); // set MultiCast-IP cbb_IPChange(self); // set tx_ip and tx_multi cbb_PortChange(self); // set tx_port // RX - IP's binden cb_BINDINGS.Clear; cb_BINDINGS.Items.Add(IP_loc); IdIPMCastClient.Bindings.clear; IdIPMCastClient.Bindings.Add.IP := IP_loc; IPlist := TStringList.Create; try GStack.AddLocalAddressesToList(IPlist); for I := 1 to IPlist.Count do begin IdIPMCastClient.Bindings.Add.IP := IPlist[i - 1]; cb_BINDINGS.Items.Add(IPlist[i - 1]); end; finally IPlist.Free; end; if(cb_BINDINGS.Items.Count > 0) then cb_BINDINGS.ItemIndex := 0; IdIPMCastClient.Active := true; IdUDPClient.Active := true; Erstaunlicherweise empfängt der IdIPMCastClient auch Uni- und Broadcast und der IdUDPClient sendet alle Cast-Typen. Wozu gibt es denn dann noch den IdIPMCastServer und den IdUDPServer ? Ein kleines Problem hab ich noch: Beim ESP8266 gibt es eine Funktion Udp.remoteIP(), welche mir die Absender-IP gibt (wie bei Indy die ABinding.PeerIP) und eine Funktion Udp.destinationIP(), welche mir zusätzlich noch das ursprüngliche Ziel angibt (also ob es eine Uni- Broad- oder Multicast-IP war). Letzteres fehlt mir beim Indy. Das wäre auch auf dem PC sehr hilfreich zu wissen / zu unterscheiden, wohin der Call eigentlich ging. Ich find dazu nix im WWW. Jemand ne Idee, wie man sich sowas ggf. separat basteln kann, falls Indy das nicht schon irgendwo bereithält ? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:20 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