zoukankan      html  css  js  c++  java
  • netty socket 客服端编程

    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 }
  • 相关阅读:
    谈谈一些有趣的CSS题目(十二)-- 你该知道的字体 font-family
    谈谈一些有趣的CSS题目(十一)-- reset.css 知多少?
    【Web动画】SVG 实现复杂线条动画
    【Web动画】SVG 线条动画入门
    引人瞩目的 CSS 变量(CSS Variable)
    谈谈一些有趣的CSS题目(十)-- 结构性伪类选择器
    ROW_NUMBER() OVER函数的基本用法
    PL SQL笔记(三)
    pushState、replaceState、onpopstate 实现Ajax页面的前进后退刷新
    无聊的人用JS实现了一个简单的打地鼠游戏
  • 原文地址:https://www.cnblogs.com/kabi/p/6115105.html
Copyright © 2011-2022 走看看