如何将java.net.MulticastSocket绑定到localhost

如何将java.net.MulticastSocket绑定到localhost,java,Java,我想将一个多播套接字绑定到地址127.0.0.1(套接字应该只能在当前主机中访问),但是通过下面的代码示例,我得到了一个 java.net.SocketException: Network is unreachable: Datagram send failed exception 有办法解决这个问题吗?这是我的密码 int port = 6677; InetAddress group = InetAddress.getByName("232.0.1.10"); try

我想将一个
多播套接字
绑定到地址127.0.0.1(套接字应该只能在当前主机中访问),但是通过下面的代码示例,我得到了一个

java.net.SocketException: Network is unreachable: Datagram send failed exception
有办法解决这个问题吗?这是我的密码

    int port = 6677;
    InetAddress group = InetAddress.getByName("232.0.1.10");
    try(MulticastSocket s = new MulticastSocket(new InetSocketAddress(InetAddress.getByName("127.0.0.1"),port))){

        String msg = "Hello";
        s.joinGroup(group);
        DatagramPacket hi = new DatagramPacket(msg.getBytes(), msg.length(),group, port);
        s.send(hi);
    }

与传统的UDP通信相比,多播有点奇怪。关键是在一个已知的“通道”上同时向任何想要访问的人共享数据。通过使用范围为224.0.0.1至239.255.255.255的IP地址,将此共享“通知”到网络。如果您尝试绑定到127.0.0.1,您就不再进行多播。如果你花一分钟思考一下,这是有道理的——你不能与其他计算机共享内部接口。

换句话说:你试图实现的原则上是不正确的。”“多播”是由协议指定的通信类型。这要求IP地址在一定范围内,所以网络组件知道“哦,是的,这是一个多播数据包”。127.0.0.1是localhost=您的计算机。您无法向计算机发送多播数据包。我使用多播进行进程间通信。目前所有进程都在同一台机器上运行。有人知道jgroups是如何运行的吗?似乎他们可以在本地机器上绑定多播。见-1.5。使用JGroups而不使用networkMulticast似乎不是进程间通信的正确机制,尤其是在同一台机器上。在不了解应用程序的情况下,我想知道使用redis或某种mqtt服务(mosquitto?)的发布/订阅模型是否更有意义。