嗨 - 我想知道是否有人可以帮助我。我正在使用Netty 4.1.9在两台Linux机器之间发送UDP消息:
据我所知,接收器代码不应该关心数据所在的NIC,所以我不明白这是什么问题。
我确定数据到达正确NIC上的接收器主机,因为在接收器上运行“ tshark -i ”会显示正确网络上的流量,并显示正确的目标端口,以及预期长度。
我在两种情况下使用的广播地址是255.255.255.255。
以下是设置接收器通道的代码,此代码在流量到达第一个NIC时工作正常,但在到达另一个NIC时则无效:
public Channel createReceivingChannel(final int port,
final EventLoopGroup myGroup) throws InterruptedException
{
return new Bootstrap()
.group(myGroup)
.channelFactory(new ChannelFactory<NioDatagramChannel>()
{
@Override
public NioDatagramChannel newChannel()
{
return new NioDatagramChannel(InternetProtocolFamily.IPv4);
}
})
.handler(new ReceiverInitializer(this.protocolConfig))
.bind(port).sync().channel();
}
这是与接收器一起使用的发送器代码,但是将UDP消息放在错误的网络上:
public Channel createSendingChannel( final NetworkAddress localAddress,
final int port,
final EventLoopGroup myGroup) throws InterruptedException
{
return new Bootstrap()
.group(myGroup)
.channelFactory(new ChannelFactory<NioDatagramChannel>()
{
@Override
public NioDatagramChannel newChannel()
{
return new NioDatagramChannel(InternetProtocolFamily.IPv4);
}
})
.localAddress(localAddress.address, port)
.option(ChannelOption.SO_BROADCAST, true)
.handler(new SenderInitializer(this.protocolConfig))
.bind(0).sync().channel();
}
这是我的发送者代码,它将数据放在正确的网络上,但上面的接收者看不到它:
public Channel createSendingChannel(
final NetworkAddress localAddress,
final int port,
final EventLoopGroup myGroup) throws InterruptedException
{
final InetSocketAddress localSocketAddress = new InetSocketAddress(localAddress.address, port);
return new Bootstrap()
.group(myGroup)
.channelFactory(new ChannelFactory<NioDatagramChannel>()
{
@Override
public NioDatagramChannel newChannel()
{
return new NioDatagramChannel(InternetProtocolFamily.IPv4);
}
})
.localAddress(localAddress.address, port)
.option(ChannelOption.SO_BROADCAST, true)
.handler(new SenderInitializer(this.protocolConfig))
.bind(localSocketAddress).sync().channel(); // difference here to bind the sender to correct NIC
}
在此阶段感激不尽的任何帮助。我被卡住了。
非常感谢,
迈克尔。