【问题标题】:Java multiple multicast sockets in same group on same host and port同一主机和端口上同一组中的 Java 多个多播套接字
【发布时间】:2013-12-05 12:33:06
【问题描述】:

我正在使用多播来实现一个简单的发现服务。应用程序上的多个实例必须能够在同一主机上运行,​​因此我最终会得到多个多播套接字,它们是同一主机上同一组的成员。

在 Linux 上,这可以按预期工作。主机上的每个应用程序实例都会接收发送到多播地址的消息。

然而,在 Windows 上,只有第一个加入多播组的应用程序才能接收发送的消息。

这是我用来创建多播套接字的代码:

socket = new MulticastSocket(PORT);
InetAddress group = InetAddress.getByName(ADDRESS);
socket.joinGroup(group);
socket.setTimeToLive(TTL);

我需要设置一些选项吗?我试过搜索 API,但找不到任何东西。

编辑:根据this website,我需要设置SO_REUSEADDR,但这只能在套接字绑定之前设置。 MulticastSocket 的构造函数似乎在创建时绑定了套接字。

【问题讨论】:

    标签: java sockets multicast multicastsocket


    【解决方案1】:

    您可以通过创建不带参数的套接字然后在该对象上调用 bind 来做到这一点。

    socket = new MulticastSocket();
    socket.setReuseAddress(true);//redundant, already set with empty constructor
    SocketAddress sockAddr = new InetSocketAddress(PORT);
    socket.bind(sockAddr);
    InetAddress group = InetAddress.getByName(ADDRESS);
    socket.joinGroup(group);
    socket.setTimeToLive(TTL);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-12
      • 1970-01-01
      • 2012-03-04
      • 2021-04-18
      相关资源
      最近更新 更多