public class NettyClient {
private Logger logger=LoggerFactory.getLogger("netty client:");
private String host;
private int port;
Bootstrap boot;
public void connect(String host,int port) {
this.host=host;
this.port=port;
EventLoopGroup group=new NioEventLoopGroup();
boot=new Bootstrap();
boot.group(group)
.channel(NioSocketChannel.class)
// .handler(new ChannelInit())
.handler(new ChannelInit());
ChannelFuture f = null;
try {
boot.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 0)
.option(ChannelOption.SO_KEEPALIVE, true);
f=boot.connect(host,port).sync();
f.channel().closeFuture().sync();
} catch (InterruptedException e) {
e.printStackTrace();
}finally {
try {
f.channel().closeFuture().sync();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public void connect() {
this.host=host;
this.port=port;
EventLoopGroup group=new NioEventLoopGroup();
boot=new Bootstrap();
boot.group(group)
.channel(NioSocketChannel.class)
// .handler(new ChannelInit())
.handler(new ChannelInit());
ChannelFuture f = null;
try {
boot.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 0)
.option(ChannelOption.SO_KEEPALIVE, true);
f=boot.connect(host,port).sync();
f.channel().closeFuture().sync();
} catch (InterruptedException e) {
e.printStackTrace();
}finally {
try {
f.channel().closeFuture().sync();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
private class ChannelInit extends ChannelInitializer<SocketChannel>{
@Override
protected void initChannel(SocketChannel ch) throws Exception {
ch.pipeline().addLast(new ClientReadHandler());
}
}
private class ClientReadHandler extends ChannelInboundHandlerAdapter{
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
ByteBuf in = (ByteBuf) msg;
logger.info("client recv info:" + in.toString(CharsetUtil.UTF_8));
ctx.write(in);
ctx.flush();
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
logger.info("client exception:" + cause.toString());
ctx.close();
}
@Override
public void channelUnregistered(ChannelHandlerContext ctx) throws Exception {
logger.info("channelUnregistered");
connect();
super.channelUnregistered(ctx);
}
}
public static void main(String[] args) {
new NettyClient().connect("127.0.0.1", 7001);
}
}
1、关键参数
2、工作流程