Java Netty UDP多播无法在windows上运行

Java Netty UDP多播无法在windows上运行,java,udp,netty,nio,multicast,Java,Udp,Netty,Nio,Multicast,我已经尝试让udp多播在windows上运行了几天,但没有成功。下面是一个简单的应用程序,它只加入一个组并写入在OSX上工作的控制台,但在windows上抛出通道关闭异常。任何帮助都将不胜感激 public class UDPMulticastTest { public void start() throws Exception{ EventLoopGroup group=new NioEventLoopGroup(); ChannelGroup

我已经尝试让udp多播在windows上运行了几天,但没有成功。下面是一个简单的应用程序,它只加入一个组并写入在OSX上工作的控制台,但在windows上抛出通道关闭异常。任何帮助都将不胜感激

    public class UDPMulticastTest {

    public void start() throws Exception{
        EventLoopGroup group=new NioEventLoopGroup();
        ChannelGroup allChannels=new DefaultChannelGroup("Test", ImmediateEventExecutor.INSTANCE);
        try{
            Bootstrap b=new Bootstrap();
            b.group(group)
            .channel(NioDatagramChannel.class)
            .option(ChannelOption.SO_BROADCAST,true)
            .handler(new SimpleChannelInboundHandler<DatagramPacket>() {

                @Override
                protected void channelRead0(ChannelHandlerContext arg0, DatagramPacket arg1) throws Exception {
                    String res=arg1.content().toString(CharsetUtil.UTF_8);
                    System.out.println(res);

                }
            });

            InetSocketAddress hostAddress=new InetSocketAddress("239.21.208.200", 58999);
            ChannelFuture channelFuture=b.bind(hostAddress);
            channelFuture.awaitUninterruptibly();
            Channel channel=channelFuture.channel();
            DatagramChannel datagramChannel=(DatagramChannel)channel;
            NetworkInterface multicastNetworkInterface=NetworkInterface.getByName("wlan0"); //used en0 for OSX, 
            datagramChannel.joinGroup(hostAddress, multicastNetworkInterface).syncUninterruptibly();
            allChannels.add(datagramChannel);
            channel.closeFuture().await();

        }finally{
            group.shutdownGracefully();
        }
    }
    public static void main(String[] args)throws Exception{
       new UDPMulticastTest().start();
    }
  }
公共类UDPMulticast测试{
public void start()引发异常{
EventLoopGroup=new NioEventLoopGroup();
ChannelGroup allChannels=新的DefaultChannelGroup(“测试”,ImmediateEventExecutor.INSTANCE);
试一试{
引导b=新引导();
b、 组(组)
.channel(NioDatagramChannel.class)
.option(ChannelOption.SO_广播,真)
.handler(新的SimpleChannelInboundHandler(){
@凌驾
受保护的无效channelRead0(ChannelHandlerContext arg0,DatagramPacket arg1)引发异常{
String res=arg1.content().toString(CharsetUtil.UTF_8);
系统输出打印项次(res);
}
});
InetSocketAddress主机地址=新的InetSocketAddress(“239.21.208.200”,58999);
ChannelFuture=b.bind(主机地址);
channelFuture.不间断地等待();
Channel=channelFuture.Channel();
DatagramChannel DatagramChannel=(DatagramChannel)通道;
NetworkInterface multicastNetworkInterface=NetworkInterface.getByName(“wlan0”);//用于OSX的en0,
datagramChannel.joinGroup(主机地址,多播网络接口).SyncUnterruptibly();
添加(datagramChannel);
channel.closeFuture().await();
}最后{
group.ShutdownGracely();
}
}
公共静态void main(字符串[]args)引发异常{
新的UDPMulticastTest().start();
}
}

发现问题在于加入组之前绑定到多播地址,由于某些原因,该组在windows上不起作用。必须更新bootstrap.bind使其看起来像这样

ChannelFuture-ChannelFuture=b.bind(新的InetSocketAddress(端口号))