Java Netty UDP多播无法在windows上运行
我已经尝试让udp多播在windows上运行了几天,但没有成功。下面是一个简单的应用程序,它只加入一个组并写入在OSX上工作的控制台,但在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
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(端口号))