网络Java UDP多播,确定发送数据包的组
我正在制作一个应用程序,其中有一个特定的线程(MulticastListenerThread),它有一个MulticastSocket,正在侦听发送到socket也在侦听的多播组的UDP(数据报)数据包
这很有效。我可以加入多播组,向该组发送消息并通过多播socket接收消息
然而,我想从接收者的角度确定他从哪个多播组接收数据包。以下代码为我提供了数据包发起人的地址,而不是多播组的地址:
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);
是否有可能确定是哪个组发送了数据包
编辑:
看来这是不可能的。 就性能影响而言(我为物联网设备工作),为每个多播组分配一个socket(从而为每个组分配一个侦听器线程)是否可行?可能会加入许多组(以十个甚至数百个为单位)。如果它是可行的,那么我只需要手动将加入的组地址保留在某个位置,并在必要时引用它。 欢迎对其他工作方法提出建议
# 1 楼答案
No组发送数据包。特定IP地址的套接字发送数据包,源IP地址在
DatagramPacket
中可用。多播数据包不是来自多播组,而是寻址到多播组# 2 楼答案
是的,您确实可以将
MulticastSocket
加入多个组,例如:然后您会收到如下数据报:
不幸的是
DatagramPacket
对象中没有java API调用,这将允许您确定发送方针对这两个组中的哪一个,您所能得到的只是网络接口的IP地址(从套接字)和发送方的IP地址(从数据报)要实现您想要做的事情,您需要创建多个
MulticastSocket
对象,并对每个套接字侦听一个组。您可以使用自己的线程或NIO同时监听它们