Java UDP多播,确定哪个组发送了数据包

6 java networking udp multicast

我正在创建一个应用程序,其中存在某个线程(MulticastListenerThread),该线程具有MulticastSocket并且正在侦听发送到套接字正在侦听的多播组的UDP(数据报)数据包.

这有效.我可以加入多播组,向该组发送消息并通过MulticastSocket接收它.

但是,我想从接收器的角度确定他收到的数据包组播组.以下代码为我提供了数据包发起者的地址,而不是多播组:

DatagramPacket packet = new DatagramPacket(buf, buf.length);
mlcSenderSocket.receive(packet);
String src_addr = packet.getAddress().getHostAddress();
Run Code Online (Sandbox Code Playgroud)

发送数据包的代码如下:

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);
Run Code Online (Sandbox Code Playgroud)

是否可以确定哪个组发送了数据包?

编辑:

看来这是不可能的.在性能影响方面(我正在为IoT设备工作),为每个多播组分配一个套接字(因此,每个组的一个监听器线程)是否可行?可能会加入许多群体(数十或数百甚至).如果它是可行的,那么我只需要手动将连接的组地址保留在某处并在必要时引用它.欢迎对其他工作的建议!

use*_*421 2

没有组发送数据包。位于特定 IP 地址的套接字发送了数据包,源 IP 地址可在DatagramPacket. 多播数据包并非源自多播组,而是发送至多播组。