Sto creando un'applicazione in cui è presente un determinato thread (MulticastListenerThread) che ha un MulticastSocket e sta ascoltando i pacchetti UDP (datagram) inviati al gruppo multicast che anche il socket sta ascoltando .Multicast Java UDP, determinare quale gruppo ha inviato il pacchetto
Questo funziona. Posso unirmi a un gruppo multicast, inviare un messaggio a quel gruppo e riceverlo tramite MulticastSocket.
Tuttavia, vorrei determinare, dal punto di vista del ricevitore, da quale gruppo multicast ha ricevuto il pacchetto. Il seguente codice mi dà l'indirizzo del mittente del pacchetto, non il gruppo multicast:
DatagramPacket packet = new DatagramPacket(buf, buf.length);
mlcSenderSocket.receive(packet);
String src_addr = packet.getAddress().getHostAddress();
Il codice per l'invio del pacchetto è la seguente:
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);
E 'del tutto possibile determinare quale gruppo ha inviato il pacchetto?
Modifica:
Sembra che questo non sia possibile. In termini di impatto sulle prestazioni (sto lavorando per dispositivi IoT), l'assegnazione di un socket per gruppo multicast (e quindi un thread listener per gruppo) può essere valida? Potenzialmente possono essere uniti molti gruppi (in termini di decine o anche di centinaia). Se è fattibile, allora ho solo bisogno di mantenere l'indirizzo del gruppo congiunto da qualche parte manualmente e fare riferimento ad esso, se necessario. I suggerimenti per altri lavori sono ben accetti!
Suppongo che una soluzione sia mantenere più oggetti 'MulticastSocket', uno per ciascun gruppo a cui si desidera partecipare. Sarebbe quindi abbastanza facile tenere traccia dell'associazione tra prese e gruppi. –
Ci ho pensato, ma sembra eccessivamente eccessivo, soprattutto dal momento che potrebbero esserci potenzialmente molti gruppi da aggiungere e questo è (in teoria) pensato per dispositivi IoT vincolati. Mi sarebbe quindi richiesto di avere un thread listener per MulticastSocket, qualcosa che preferirei non fare. –