Netty TCPクライアントの作成

13951 ワード

クライアント
NettyはTCPクライアントを作成するために使用できます.ここでは、Nettyを使用してTCPクライアントを作成する方法について説明します.Nettyを使用してクライアントを作成するには、次の手順に従います.
  • EventLoopGroup
  • を作成
  • Bootstrap
  • の作成と構成
  • ChannelInitializer
  • を作成
  • クライアント
  • を起動する.
    各手順は、Nettyを使用してTCPクライアントを作成する完全な例を次に示します.
    EventLoopGroup group = new NioEventLoopGroup();
    try{
        Bootstrap clientBootstrap = new Bootstrap();
    
        clientBootstrap.group(group);
        clientBootstrap.channel(NioSocketChannel.class);
        clientBootstrap.remoteAddress(new InetSocketAddress("localhost", 9999));
        clientBootstrap.handler(new ChannelInitializer<SocketChannel>() {
            protected void initChannel(SocketChannel socketChannel) throws Exception {
                socketChannel.pipeline().addLast(new ClientHandler());
            }
        });
        ChannelFuture channelFuture = clientBootstrap.connect().sync();
        channelFuture.channel().closeFuture().sync();
    } finally {
        group.shutdownGracefully().sync();
    }
    

    EventLoopGroupの作成
    Nettyを使用してTCPクライアントを作成する最初のステップは、EventLoopGroupを作成することです.Java NIOを使用した例を示したので、NioEventLoopGroupを作成しました.次にEventLoopGroupを作成するコードを示します.
    EventLoopGroup group = new NioEventLoopGroup();
    

    Bootstrapの作成と構成
    Nettyを使用してTCPクライアントを作成する第2のセクションは、NettyのBootstrapインスタンスを作成することです.なお、NettyのTCPサーバはサーバBootstrapを使用しているが、TCPクライアントはBootstrapインスタンスを使用している.NettyのBootstrapインスタンスを作成するコードを次に示します.
    Bootstrap clientBootstrap = new Bootstrap();
    

    Bootstrapインスタンスは構成する必要があります.そうしないと使用できません.次に、Bootstrapインスタンスを構成するコードを示します.
    clientBootstrap.group(group);
    clientBootstrap.channel(NioSocketChannel.class);
    clientBootstrap.remoteAddress(new InetSocketAddress("localhost", 9999));
    

    上記のコードはEventLoopGroupをBootstrapに設定し、BootstrapインスタンスがNIOを使用することを指定し、接続するリモートIPアドレスとTCPポート番号を設定します.
    ChannelInitializerの作成
    Nettyを使用してTCPクライアントを作成する第3のステップは、ChannelInitializerを作成し、Bootstrapインスタンスに添付することです.具体的なコードは次のとおりです.
    clientBootstrap.handler(new ChannelInitializer<SocketChannel>() {
        protected void initChannel(SocketChannel socketChannel) throws Exception {
            socketChannel.pipeline().addLast(new ClientHandler());
        }
    });
    

    ChannelInitializerは、作成したSocketChannelにClientHandlerインスタンスを添付します.接続されているSocketChannelからデータを受信すると、ClientHandlerが呼び出されます.
    ClientHandlerはSocketChannelのchannelパイプに添付されている.
    クライアントの起動
    Nettyを使用してTCPクライアントを作成する最後のステップは、クライアントを起動することです.次に、クライアントを起動するコードを示します.
    ChannelFuture channelFuture = clientBootstrap.connect().sync();
    

    上記のコードコマンドBootstrapインスタンスは、リモート・サーバに接続され、完了するまで待機します.
    次のコードは、クライアントが閉じるまで待機します.
    channelFuture.channel().closeFuture().sync();
    

    ClientHandler
    リモートサーバに接続するSocketChannelに添付されているClientHandlerには、実際のクライアント動作が含まれています.次に、ClientHandlerの例を示します.
    public class ClientHandler extends SimpleChannelInboundHandler {
    
        @Override
        public void channelActive(ChannelHandlerContext channelHandlerContext){
            channelHandlerContext.writeAndFlush(Unpooled.copiedBuffer("Netty Rocks!", CharsetUtil.UTF_8));
        }
    
        @Override
        public void channelRead0(ChannelHandlerContext channelHandlerContext, ByteBuf in) {
            System.out.println("Client received: " + in.toString(CharsetUtil.UTF_8));
        }
    
        @Override
        public void exceptionCaught(ChannelHandlerContext channelHandlerContext, Throwable cause){
            cause.printStackTrace();
            channelHandlerContext.close();
        }
    }
    

    テキストリンク:http://tutorials.jenkov.com/netty/netty-tcp-client.html