【问题标题】:Servers stops receiving UDP Multicast packets when I create multiple servers on same node当我在同一节点上创建多个服务器时,服务器停止接收 UDP 多播数据包
【发布时间】:2014-12-17 23:56:21
【问题描述】:

我使用 Netty 发送和接收 UDP 多播消息,当我在同一节点上创建多个服务器时,它有时会停止接收来自其他服务器的数据包。但是,即使它们没有收到来自其他服务器的任何数据包,它们仍然会继续接收使用同一组播服务器发送的数据包。

这是服务器代码:

multicastAddress = new InetSocketAddress("239.255.27.1", 14878);

Bootstrap a = new Bootstrap()
                .group(group)
                .channelFactory(() -> new NioDatagramChannel(InternetProtocolFamily.IPv4))
                .localAddress(multicastAddress)
                .option(ChannelOption.IP_MULTICAST_IF, NetUtil.LOOPBACK_IF)
                .option(ChannelOption.SO_REUSEADDR, true)
                .handler(new ChannelInitializer<NioDatagramChannel>() {
                    @Override
                    public void initChannel(NioDatagramChannel ch) throws Exception {
                        h.pipeline().addLast(new ChannelInboundHandler() {
                              @Override
                              public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
                                    System.out.println(msg);
                              }
                        });
                    }
                });

multicastServer = (NioDatagramChannel) a.bind().sync().channel();
multicastServer.joinGroup(multicastAddress, NetUtil.LOOPBACK_IF).sync();

客户端定期发送相同的ByteBuf:

multicastServer.writeAndFlush(new DatagramPacket(Unpooled.copyInt(1), multicastAddress));

当我在节点上启动服务器时,它开始接收从该服务器发送的数据包。然后,如果在同一个节点上创建第二个服务器,它通常可以工作并且服务器接收从第一和第二个服务器发送的数据包。但是,当我创建更多绑定到同一端口的服务器时(我使用ChannelOption.SO_REUSEADDR,所以这应该是一个问题),有时所有服务器都停止接收来自其他服务器的数据包,而只接收从同一服务器发送的数据包。

【问题讨论】:

    标签: java networking udp netty multicast


    【解决方案1】:

    问题出在这里:

    .option(ChannelOption.IP_MULTICAST_IF, NetUtil.LOOPBACK_IF)
    

    这告诉 UDP 只向 localhost 发送成员资格报告,因此其他主机不知道该主机是成员。只需将其删除。

    【讨论】:

      猜你喜欢
      • 2019-05-26
      • 2021-09-22
      • 1970-01-01
      • 2015-07-13
      • 2014-04-03
      • 2013-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多