Я использую Netty для отправки и приема сообщений многоадресной передачи UDP, а когда я создаю несколько серверов на одном и том же узле, он иногда останавливает прием пакетов с других серверов. Однако, даже несмотря на то, что они не получают никакого пакета с других серверов, они все равно продолжают получать пакеты, которые отправляются с использованием того же многоадресного сервера.Серверы перестают получать пакеты многоадресной передачи 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
, поэтому это должно быть проблемой), иногда все серверы перестают принимать пакеты с других серверов, а только получают пакеты, которые отправляются с одного и того же сервера.