2

Netty を使用してアプリケーションを開発していますが、接続タイムアウトなどの場合にスローされるクライアント側で ConnectException を処理する必要があります。

これがコードです

import io.netty.bootstrap.Bootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioSocketChannel;
import io.netty.util.concurrent.Future;
import io.netty.util.concurrent.FutureListener;

public class ConnectTest {

public static void main(String[] args) throws Exception {
    Bootstrap b = new Bootstrap();
    b.group(new NioEventLoopGroup()).channel(NioSocketChannel.class)
    .handler(new ChannelInitializer<SocketChannel>() {

        @Override
        public void initChannel(SocketChannel ch) throws Exception {

        }
    });
    final ChannelFuture f = b.connect("0.0.0.0", 8080);
    f.addListener(new FutureListener<Void>() {

        @Override
        public void operationComplete(Future<Void> future) throws Exception {
            if (!f.isSuccess())
                System.out.println("Test Connection failed");
        }
    });
    f.sync();
}
}

そして、これが結果です:

        テスト接続に失敗しました
        スレッド「メイン」での例外
    java.net.ConnectException: 接続が拒否されました: 詳細情報はありません: /0.0.0.0:8080
        at sun.nio.ch.SocketChannelImpl.checkConnect(ネイティブメソッド)
        sun.nio.ch.SocketChannelImpl.finishConnect で (不明なソース)
        io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect (NioSocketChannel.java:208) で
        at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:287)
        io.netty.channel.nio.NioEventLoop.processSelectedKey (NioEventLoop.java:524) で
        io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized (NioEventLoop.java:464) で
        io.netty.channel.nio.NioEventLoop.processSelectedKeys (NioEventLoop.java:378) で
        io.netty.channel.nio.NioEventLoop.run (NioEventLoop.java:350) で
        io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116) で
        java.lang.Thread.run で (不明なソース)

ご覧のとおり、リスナーは正常に動作しますが、いまだにスタック トレースが出力され、それをインターセプトする場所がわかりません。

ヒントはありますか?

4

1 に答える 1