我正在制作一个应用程序,其中有一个特定的线程(MulticastListenerThread),它具有一个MulticastSocket,并侦听发送到该套接字所侦听的多播组的UDP(数据报)包。
这个可以工作。我可以加入多播组,向该组发送消息并通过MulticastSocket接收它。
然而,我想确定从接收方的角度来看,他从哪个多播组接收到了数据包。以下代码给出了数据包发起者的地址,而不是多播组的地址:
发送数据包的代码如下:
这个可以工作。我可以加入多播组,向该组发送消息并通过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);
有没有可能确定是哪个组发送了数据包?
编辑:
看起来这是不可能的。在性能影响方面(我正在为物联网设备工作),为每个多播组分配一个套接字(因此,每个组都有一个监听器线程)是否可行?可能会加入许多组(甚至数十个或数百个)。如果可行,那么我只需要手动保留已加入的组地址,并根据需要引用它。欢迎提出其他解决方法建议!
MulticastSocket
对象,每个对象加入一个组。这样很容易跟踪套接字和组之间的关联。 - Duncan Jones