1 package com.ming.netty.nio; 2 3 import io.netty.bootstrap.Bootstrap; 4 import io.netty.channel.ChannelFuture; 5 import io.netty.channel.ChannelInitializer; 6 import io.netty.channel.ChannelOption; 7 import io.netty.channel.EventLoopGroup; 8 import io.netty.channel.nio.NioEventLoopGroup; 9 import io.netty.channel.socket.SocketChannel;10 import io.netty.channel.socket.nio.NioSocketChannel;11 12 /**13 * netty 客户端模拟14 * @author mingge15 *16 */17 public class TimeClient {18 19 20 public static void main(String[] args) throws Exception{21 new TimeClient().connect("127.0.0.1", 8400);22 }23 24 public void connect(String addr,int port) throws Exception{25 EventLoopGroup group=new NioEventLoopGroup();26 try {27 Bootstrap b=new Bootstrap();28 b.group(group).channel(NioSocketChannel.class)29 .option(ChannelOption.TCP_NODELAY, true)30 .handler(new ChannelInitializer() {31 public void initChannel(SocketChannel ch) throws Exception{32 ch.pipeline().addLast(new TimeClientHandler());33 }34 });35 ChannelFuture f=b.connect(addr,port);36 f.channel().closeFuture().sync();//等待客户端关闭连接37 } catch (Exception e) {38 // TODO: handle exception39 }finally{40 group.shutdownGracefully();41 }42 }43 }
1 package com.ming.netty.nio; 2 3 import io.netty.buffer.ByteBuf; 4 import io.netty.buffer.Unpooled; 5 import io.netty.channel.ChannelHandlerAdapter; 6 import io.netty.channel.ChannelHandlerContext; 7 8 public class TimeClientHandler extends ChannelHandlerAdapter { 9 10 private final ByteBuf byteMsg;11 12 public TimeClientHandler() {13 byte[] req="我是请求数据哦".getBytes();14 byteMsg=Unpooled.buffer(req.length);15 byteMsg.writeBytes(req);16 }17 18 @Override19 public void channelActive(ChannelHandlerContext ctx) throws Exception {20 ctx.writeAndFlush(byteMsg);21 }22 23 @Override24 public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {25 ByteBuf buf=(ByteBuf)msg;26 byte[] req=new byte[buf.readableBytes()];27 buf.readBytes(req);28 String body=new String(req,"GBK");29 System.out.println("body:"+body);30 }31 32 @Override33 public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {34 //释放资源35 ctx.close();36 }37 38 39 }