我正在使用多播来实现一个简单的发现服务。应用程序上的多个实例必须能够在同一主机上运行,因此我最终会得到多个多播套接字,它们是同一主机上同一组的成员。
在 Linux 上,这按预期工作。主机上的每个应用程序实例都会接收发送到多播地址的消息。
然而,在 Windows 上,只有第一个加入多播组的应用程序才能接收发送的消息。
这是我用来创建多播套接字的代码:
socket = new MulticastSocket(PORT);
InetAddress group = InetAddress.getByName(ADDRESS);
socket.joinGroup(group);
socket.setTimeToLive(TTL);
我需要设置一些选项吗?我试过搜索 API,但找不到任何东西。
编辑:根据这个网站,我需要设置SO_REUSEADDR
,但这只能在套接字绑定之前设置。MulticastSocket 的构造函数似乎在创建时绑定了套接字。