如果端口已被使用,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
以下问题: 如果某个端口已被使用,我希望出现异常。
所以我尝试在一个线程中启动我的服务器两次
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