• 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 }
  • 相关阅读:
    点击Notification之后收起通知栏
    Visual Studio常用的快捷键
    数据库语法二之外键
    数据引擎 创建表完整语法,字段类型,约束条件
    数据库 tcp协程实现并发 回调函数
    GIL以及协程
    进程,互斥锁,生产者消费者,线程
    udp协议,进程(同步,异步)
    单例模式,网络编程之tcp协议以及粘包问题
    网络编程
  • 原文地址:https://www.cnblogs.com/huzi007/p/5506669.html
Copyright © 2020-2023  润新知