我使用netty
4来编写UDP
服务器。我的目标是接收广播数据包并发送(广播)响应。 (实际上DHCP
,但我不认为这对我的问题很重要。)
由于我无法绑定到单个接口并且在不成为root的情况下侦听广播数据包,因此我绑定了任何一个:
Bootstrap bootstrap = new Bootstrap();
bootstrap.group(eventLoopGroup)
.channel(NioDatagramChannel.class)
.option(ChannelOption.SO_BROADCAST, true)
.handler(new DhcpChannelInitializer());
bootstrap.bind(67);
在我的消息处理程序(ChannelInboundHandlerAdapter)中,我需要发送广播数据包作为响应。问题是," 255.255.255.255"不起作用。所以我需要界面的广播地址。但我不知道入站数据包来自哪个接口。
有没有办法告诉数据包来自哪个接口(本地地址)? ((DatagramPacket) msg).recipient()
给出0.0.0.0 - 因为它是广播。
如果不可能,我的解决方法是查询所有接口并将数据包发送到所有广播地址。但这会产生不必要的流量。 有任何建议吗?