Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java同一主机和端口上同一组中的多个多播套接字_Java_Sockets_Multicast_Multicastsocket - Fatal编程技术网

Java同一主机和端口上同一组中的多个多播套接字

Java同一主机和端口上同一组中的多个多播套接字,java,sockets,multicast,multicastsocket,Java,Sockets,Multicast,Multicastsocket,我使用多播来实现一个简单的发现服务。应用程序上的多个实例必须能够在同一主机上运行,因此,我最终得到了多个多播套接字,它们是同一主机上同一组的成员 在Linux上,这是可以预期的。主机上的每个应用程序实例都接收发送到多播地址的消息 但是,在Windows上,只有加入多播组的第一个应用程序接收发送的消息 下面是我用来创建多播套接字的代码: socket = new MulticastSocket(PORT); InetAddress group = InetAddress.getByName(ADD

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

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

但是,在Windows上,只有加入多播组的第一个应用程序接收发送的消息

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

socket = new MulticastSocket(PORT);
InetAddress group = InetAddress.getByName(ADDRESS);
socket.joinGroup(group);
socket.setTimeToLive(TTL);
我需要设置一些选项吗?我试着搜索API,但什么也找不到


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

您可以通过创建不带参数的套接字,然后对该对象调用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);