netty socket 客服端编程

 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 }
原文地址:https://www.cnblogs.com/huzi007/p/5506669.html