【发布时间】:2015-02-18 03:11:48
【问题描述】:
我正在制作一个应用程序,其中有一个特定线程 (MulticastListenerThread),它有一个 MulticastSocket,并且正在侦听发送到套接字也在侦听的多播组的 UDP(数据报)数据包。
这行得通。我可以加入一个多播组,向该组发送消息并通过 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对象,每个你想加入的组一个。这样就很容易跟踪套接字和组之间的关联了。 -
我确实想到了这一点,但它似乎过于夸张,特别是因为我可能有很多团体可以加入,而这(理论上)适用于受限的物联网设备。然后,我需要为每个 MulticastSocket 设置一个侦听器线程,这是我不想做的事情。
标签: java networking udp multicast