Я создаю приложение, в котором есть определенный поток (MulticastListenerThread), который имеет MulticastSocket и прослушивает пакеты UDP (датаграммы), отправленные в группу многоадресной рассылки, ,Java UDP multicast, определить, какая группа отправила пакет
Это работает. Я могу присоединиться к группе многоадресной передачи, отправить сообщение этой группе и получить ее через MulticastSocket.
Однако я хотел бы определить, с точки зрения приемника, из какой группы многоадресной передачи он получил пакет. Следующий код дает мне адрес создателя пакета, а не многоадресной группы:
DatagramPacket packet = new DatagramPacket(buf, buf.length);
mlcSenderSocket.receive(packet);
String src_addr = packet.getAddress().getHostAddress();
код для отправки пакета выглядит следующим образом:
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);
Является ли это вообще возможно определить какая группа отправила пакет?
Редактировать:
Похоже, что это невозможно. Что касается воздействия на производительность (я работаю на устройствах IoT), назначил бы сокет на группу мультивещания (и, следовательно, поток слушателей на группу), жизнеспособный? Потенциально многие группы могут быть объединены (с точки зрения десятков или сотен даже). Если это жизнеспособно, тогда мне просто нужно сохранить присоединенный групповой адрес где-то вручную и обратиться к нему по мере необходимости. Предложения по другим работам приветствуются!
Я полагаю, что работа вокруг будет заключаться в том, чтобы поддерживать несколько объектов MulticastSocket, по одному для каждой группы, к которой вы хотите присоединиться. Тогда будет достаточно легко отслеживать связь между сокетами и группами. –
Я действительно думал об этом, но это кажется чрезмерно чрезмерным, тем более что я мог бы потенциально много групп присоединиться, и это (теоретически) предназначено для ограниченных устройств IoT. Тогда мне понадобится поток прослушивателя в MulticastSocket, что я бы предпочел не делать. –