Netty TCPクライアントの作成
13951 ワード
クライアント
NettyはTCPクライアントを作成するために使用できます.ここでは、Nettyを使用してTCPクライアントを作成する方法について説明します.Nettyを使用してクライアントを作成するには、次の手順に従います. EventLoopGroup を作成 Bootstrap の作成と構成 ChannelInitializer を作成クライアント を起動する.
各手順は、Nettyを使用してTCPクライアントを作成する完全な例を次に示します.
EventLoopGroupの作成
Nettyを使用してTCPクライアントを作成する最初のステップは、EventLoopGroupを作成することです.Java NIOを使用した例を示したので、NioEventLoopGroupを作成しました.次にEventLoopGroupを作成するコードを示します.
Bootstrapの作成と構成
Nettyを使用してTCPクライアントを作成する第2のセクションは、NettyのBootstrapインスタンスを作成することです.なお、NettyのTCPサーバはサーバBootstrapを使用しているが、TCPクライアントはBootstrapインスタンスを使用している.NettyのBootstrapインスタンスを作成するコードを次に示します.
Bootstrapインスタンスは構成する必要があります.そうしないと使用できません.次に、Bootstrapインスタンスを構成するコードを示します.
上記のコードはEventLoopGroupをBootstrapに設定し、BootstrapインスタンスがNIOを使用することを指定し、接続するリモートIPアドレスとTCPポート番号を設定します.
ChannelInitializerの作成
Nettyを使用してTCPクライアントを作成する第3のステップは、ChannelInitializerを作成し、Bootstrapインスタンスに添付することです.具体的なコードは次のとおりです.
ChannelInitializerは、作成したSocketChannelにClientHandlerインスタンスを添付します.接続されているSocketChannelからデータを受信すると、ClientHandlerが呼び出されます.
ClientHandlerはSocketChannelのchannelパイプに添付されている.
クライアントの起動
Nettyを使用してTCPクライアントを作成する最後のステップは、クライアントを起動することです.次に、クライアントを起動するコードを示します.
上記のコードコマンドBootstrapインスタンスは、リモート・サーバに接続され、完了するまで待機します.
次のコードは、クライアントが閉じるまで待機します.
ClientHandler
リモートサーバに接続するSocketChannelに添付されているClientHandlerには、実際のクライアント動作が含まれています.次に、ClientHandlerの例を示します.
テキストリンク:http://tutorials.jenkov.com/netty/netty-tcp-client.html
NettyはTCPクライアントを作成するために使用できます.ここでは、Nettyを使用してTCPクライアントを作成する方法について説明します.Nettyを使用してクライアントを作成するには、次の手順に従います.
各手順は、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