![]() |
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 19:28 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