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 mingge 15 * 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<SocketChannel>() { 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 exception 39 }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 @Override 19 public void channelActive(ChannelHandlerContext ctx) throws Exception { 20 ctx.writeAndFlush(byteMsg); 21 } 22 23 @Override 24 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 @Override 33 public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { 34 //释放资源 35 ctx.close(); 36 } 37 38 39 }
时间: 2024-10-13 14:42:32