在java中进行多播,无需目标主机加入该组

时间:2013-10-20 14:32:47

标签: java multicast

这可能是一个愚蠢的问题,我不知道是否可能。例如,如果我有4台服务器,A,B,C和D.在我在互联网上创建的示例中。如果主机A想要向C和D发送消息,则A必须加入该组,C和D也是如此。我的问题有时候,我可能希望A将消息发送到B和C,或仅发送到C和D.或者甚至B可以稍后向A和C或A和D发送消息。这个问题有没有优雅的解决方案?

更多细节: 我想要实现的是一个应用程序,它可以将消息发送到其他任意应用程序的列表。因此列表不会每次都保持不变。在Java中,目前为了通过多播来实现,发送方和接收方必须加入同一个组。每次更改列表时都需要重复此操作。


非常感谢你。

2 个答案:

答案 0 :(得分:0)

通常,这是通过在接收方设置过滤器来完成的。在数据包中包含用于接收消息的服务器列表,如果服务器收到不适合它的消息,则忽略该消息。有标准的过滤技术,但如果你需要更灵活的东西,你必须在代码中添加它。

答案 1 :(得分:0)

  

如果主持人A想要向C和D发送消息,A必须加入该组,C和D也是如此

没有。只有C和D必须加入该组。

  

我的问题有时候,我可能希望A将消息发送到B和C,或仅发送到C和D.或者甚至B可以稍后向A和C或A和D发送消息

这听起来不像多播。如果你有这么少的主机,为什么不使用单播?

  

在Java中,目前为了通过多播实现这一点,发送方和接收方必须加入同一个组。

这不正确。

  1. Java与它无关。
  2. “目前”也没有。
  3. 不要求发件人加入多播组,或者用Java术语表示甚至不使用MulticastSocket而不是DatagramSocket.
  4. Java只提供了一个基于IP多播构建的类库,如1989年RFC 1112中所定义。

    在我看来,您可以通过巧妙地使用多个组播组或同一组播组中的多个端口来实现您想要的。

    但正如目前所表达的那样,你的问题是矛盾的。