作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用多播来实现简单的发现服务。应用程序上的多个实例必须能够在同一主机上运行,因此我最终得到了多个多播套接字,它们是同一主机上同一组的成员。
在 Linux 上,这可以按预期工作。主机上应用程序的每个实例都会接收发送到多播地址的消息。
但是在 Windows 上,只有第一个加入多播组的应用程序才会收到发送的消息。
这是我用来创建多播套接字的代码:
socket = new MulticastSocket(PORT);
InetAddress group = InetAddress.getByName(ADDRESS);
socket.joinGroup(group);
socket.setTimeToLive(TTL);
我需要设置一些选项吗?我尝试过搜索 API,但找不到任何内容。
编辑:根据this website ,我需要设置SO_REUSEADDR
,但这只能在套接字绑定(bind)之前设置。 MulticastSocket 的构造函数似乎在创建时绑定(bind)了套接字。
最佳答案
您可以通过创建不带参数的套接字然后在该对象上调用绑定(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);
关于Java在同一主机和端口上同一组中的多个多播套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20400152/
我是一名优秀的程序员,十分优秀!