如果端口已被使用,Netty 不会抱怨

Netty doesn't complain if port is already used

以下问题: 如果某个端口已被使用,我希望出现异常。

所以我尝试在一个线程中启动我的服务器两次

    public void start() {
    new Thread(new Runnable() {
        @Override
        public void run() {
            EventLoopGroup bossGroup = new EpollEventLoopGroup();
            EventLoopGroup workerGroup = new EpollEventLoopGroup();

            ServerBootstrap serverBootstrap = new ServerBootstrap();
            serverBootstrap.group(bossGroup, workerGroup)
                    .channel(NioServerSocketChannel.class)
                    .childHandler(new ChannelInitializer<SocketChannel>() {
                        @Override
                        protected void initChannel(final SocketChannel socketChannel) throws Exception {
                            socketChannel.pipeline().addLast("decoder", new Decoder(Server.this));
                            socketChannel.pipeline().addLast("encoder", new Encoder(Server.this));
                        }
                    });

            serverBootstrap.bind(port).channel().closeFuture().syncUninterruptibly();
        }
    }).start();
}

但也不例外。我还尝试添加一个通道处理程序并在那里捕获异常,但没有运气:/

用 bind(port) 包围捕获异常的行也没有效果。但是我注意到,当我向 ChannelFuture 添加 ChannelListener 时,其中一个启动实例从未达到该点。

有人有想法吗?

绑定后你是直接从future获取频道,但此时可能还没有完成。 尝试等待您的绑定完成 bind(port).sync().

参考参考https://www.baeldung.com/netty#6-server-bootstrap and https://netty.io/4.1/api/io/netty/channel/ChannelFuture.html