0
UDP 멀티 캐스트 메시지를 보내고받는 데 Netty를 사용하고 같은 서버에 여러 서버를 만들 때 다른 서버에서 패킷 수신을 중지하는 경우가 있습니다. 그러나 다른 서버에서 패킷을받지 못하더라도 동일한 멀티 캐스트 서버를 사용하여 전송 된 패킷을 계속 수신합니다. 클라이언트는 주기적으로 같은 ByteBuf를 전송 동일한 노드에 여러 개의 서버를 만들 때 서버에서 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();
는 :
multicastServer.writeAndFlush(new DatagramPacket(Unpooled.copyInt(1), multicastAddress));
I는 노드 서버를 시작은 시작 패킷을 수신하는 서버로부터 전송되는 다음
서버 코드 . 그런 다음 두 번째 서버를 동일한 노드에 만들면 일반적으로 작동하고 서버는 첫 번째 및 두 번째 서버에서 보낸 패킷을받습니다. 그러나 동일한 포트에 바인딩 된 몇 가지 서버를 만들 때 (즉,ChannelOption.SO_REUSEADDR
을 사용해야 함) 때로는 모든 서버가 다른 서버의 패킷 수신을 중지하는 대신 동일한 서버에서 보낸 패킷 만 수신합니다.