Ich mache eine Anwendung, wo gibt es einen bestimmten Thread (MulticastListenerThread), die eine MulticastSocket hat und auf UDP (Datagramm) -Pakete empfängt, die an die Multicast-Gruppe gesendet werden, die der Socket zuhört .Java UDP Multicast, bestimmen, welche Gruppe gesendet Paket
Das funktioniert. Ich kann einer Multicast-Gruppe beitreten, eine Nachricht an diese Gruppe senden und sie über die MulticastSocket empfangen.
Ich möchte jedoch aus Sicht des Empfängers feststellen, von welcher Multicast-Gruppe er das Paket erhalten hat. Der folgende Code gibt mir die Adresse des Urhebers des Pakets, nicht die Multicast-Gruppe:
DatagramPacket packet = new DatagramPacket(buf, buf.length);
mlcSenderSocket.receive(packet);
String src_addr = packet.getAddress().getHostAddress();
Der Code für das Senden des Pakets ist wie folgt:
InetAddress address = InetAddress.getByName(dest);
packet = new DatagramPacket(payload, payload.length,
address, mlcEventPort);
LLog.out(this,"[NC] MLC packet Sent to ev port MLC " + mlcEventPort
+ " and to addr " + address);
mlcSenderSocket.send(packet);
Ist es überhaupt möglich, zu bestimmen Welche Gruppe hat das Paket gesendet?
Edit:
Es scheint dies nicht möglich ist. In Bezug auf die Auswirkungen auf die Leistung (ich arbeite für IoT-Geräte), wäre die Zuweisung eines Sockets pro Multicast-Gruppe (und damit ein Listener-Thread pro Gruppe) lebensfähig? Potentiell können viele Gruppen zusammengeschlossen werden (in Zehner- oder Hundertergruppen). Wenn es machbar ist, dann muss ich die beigefügte Gruppenadresse einfach irgendwo manuell behalten und bei Bedarf darauf verweisen. Vorschläge für andere Work arounds sind willkommen!
Ich nehme an, eine Umgehung wäre, mehrere "MulticastSocket" -Objekte zu pflegen, eins für jede Gruppe, der Sie beitreten möchten. Es wäre dann leicht genug, den Zusammenhang zwischen Sockeln und Gruppen zu verfolgen. –
Ich habe darüber nachgedacht, aber es scheint übermäßig übermäßig, vor allem da ich möglicherweise viele Gruppen beitreten könnte, und dies ist (in der Theorie) für Constrained IoT-Geräte gedacht. Ich müsste dann einen Listener-Thread pro MulticastSocket haben, etwas, das ich lieber nicht machen würde. –