zoukankan      html  css  js  c++  java
  • netty serverclient

    1、pom.xml

    注:最好引用最高版本,不然会导致ChannelHandlerAdapter的Override方法无效

    <dependencies>
      <dependency>
        <groupId>io.netty</groupId>
        <artifactId>netty-all</artifactId>
        <version>5.0.0.Alpha2</version>
      </dependency>
    </dependencies>

    2、客户端

    TimeClient、TimeClientHandler 


    import io.netty.buffer.ByteBuf;
    import io.netty.buffer.Unpooled;
    import io.netty.channel.ChannelHandlerAdapter;
    import io.netty.channel.ChannelHandlerContext;
    import io.netty.util.CharsetUtil;
    import io.netty.util.ReferenceCountUtil;

    public class TimeClientHandler extends ChannelHandlerAdapter {

      //private byte[] req;
      private String req;
      /*public TimeClientHandler(){
        req="$tmb00035ET3318/08/22 11:5704026.75,027.31,20.00,20.00$".getBytes();
      }*/

      public TimeClientHandler(String sendMsg){
        //req=sendMsg.getBytes();
        req=sendMsg;
      }


      @Override
      public void channelActive(ChannelHandlerContext ctx) throws Exception{
        ByteBuf message=null;
        for(int i=0;i<100;i++){
          message=Unpooled.buffer(req.getBytes().length);
          message.writeBytes(("第"+String.valueOf(i)+" 次:"+req).getBytes());
          ctx.writeAndFlush(message);
        }
      }

      @Override
      public void channelRead(ChannelHandlerContext ctx,Object msg) {
        try{
          ByteBuf in=(ByteBuf)msg;
          System.out.println(in.toString(CharsetUtil.UTF_8));
        }finally {
          ReferenceCountUtil.release(msg);
        }
      }

      @Override
      public void exceptionCaught(ChannelHandlerContext ctx,Throwable cause) throws Exception{
        cause.printStackTrace();
        ctx.close();
      }

      }

    import io.netty.bootstrap.Bootstrap;
    import io.netty.buffer.ByteBuf;
    import io.netty.buffer.Unpooled;
    import io.netty.channel.ChannelFuture;
    import io.netty.channel.ChannelInitializer;
    import io.netty.channel.ChannelOption;
    import io.netty.channel.EventLoopGroup;
    import io.netty.channel.nio.NioEventLoopGroup;
    import io.netty.channel.socket.SocketChannel;
    import io.netty.channel.socket.nio.NioSocketChannel;
    import io.netty.handler.codec.DelimiterBasedFrameDecoder;

    public class TimeClient {

      public void connetc(int port,String host) throws Exception{
        System.out.println(port+"---"+port);
        EventLoopGroup eventLoopGroup=new NioEventLoopGroup();
        try {
          Bootstrap b=new Bootstrap();
          b=b.group(eventLoopGroup).channel(NioSocketChannel.class)
          .option(ChannelOption.TCP_NODELAY,true).
          handler(new ChannelInitializer<SocketChannel>() {
          @Override
          protected void initChannel(SocketChannel socketChannel) throws Exception{
            ByteBuf byteBuf=Unpooled.copiedBuffer("$".getBytes());
            socketChannel.pipeline().addLast(new DelimiterBasedFrameDecoder(1024,byteBuf));
            socketChannel.pipeline().addLast(new TimeClientHandler(""));
          }
          });


          ChannelFuture f=b.connect(host,port).sync();
          f.channel().closeFuture().sync();
        }finally {
          eventLoopGroup.shutdownGracefully();
        }
      }

      public void connetc(int port,String host,String sendMsg) throws Exception{
        System.out.println(port+"---"+port);
        EventLoopGroup eventLoopGroup=new NioEventLoopGroup();
        try {
          Bootstrap b=new Bootstrap();
          b=b.group(eventLoopGroup).channel(NioSocketChannel.class)
          .option(ChannelOption.TCP_NODELAY,true).
          handler(new ChannelInitializer<SocketChannel>() {
          @Override
          protected void initChannel(SocketChannel socketChannel) throws Exception{
            ByteBuf byteBuf=Unpooled.copiedBuffer("$".getBytes());
            socketChannel.pipeline().addLast(new DelimiterBasedFrameDecoder(1024,byteBuf));
            socketChannel.pipeline().addLast(new TimeClientHandler(sendMsg));
          }
          });


          ChannelFuture f=b.connect(host,port).sync();
          f.channel().closeFuture().sync();
        }finally {
          eventLoopGroup.shutdownGracefully();
        }
      }

      public static void main(String[] args) throws Exception{
        //new TimeClient().connetc(8089,"localhost");
        String content="我客户端向服务端发送的信息【年低准备过春节了 年低准备过春节了】";
        String sendMsg="$ from client port 8090 "+content+" $";
        new TimeClient().connetc(8090,"localhost",sendMsg);
      }
    }

    3、服务端

    DiscardServer 、ChildChannelHandler  DiscardServerHandler 


    import io.netty.bootstrap.ServerBootstrap;
    import io.netty.channel.ChannelFuture;
    import io.netty.channel.ChannelOption;
    import io.netty.channel.EventLoopGroup;
    import io.netty.channel.nio.NioEventLoopGroup;
    import io.netty.channel.socket.nio.NioServerSocketChannel;

    public class DiscardServer {


      public void run(int port) throws Exception{
        EventLoopGroup bossGroup=new NioEventLoopGroup();
        EventLoopGroup workerGroup=new NioEventLoopGroup();
        System.out.println("准备运行端口:"+port);
        try {
          ServerBootstrap b=new ServerBootstrap();
          b=b.group(bossGroup,workerGroup).channel(NioServerSocketChannel.class)
          .option(ChannelOption.SO_BACKLOG,128).
          childHandler(new ChildChannelHandler());
          ChannelFuture f=b.bind(port).sync();
          f.channel().closeFuture().sync();
        }finally {
          workerGroup.shutdownGracefully();
          bossGroup.shutdownGracefully();
        }
      }

      public static void main(String[] args) throws Exception{
        new DiscardServer().run(8090);
      }
    }

    import io.netty.buffer.ByteBuf;
    import io.netty.buffer.Unpooled;
    import io.netty.channel.ChannelInitializer;
    import io.netty.channel.socket.SocketChannel;
    import io.netty.handler.codec.DelimiterBasedFrameDecoder;

      public class ChildChannelHandler extends ChannelInitializer<SocketChannel> {

      @Override
      protected void initChannel(SocketChannel socketChannel) throws Exception {
        ByteBuf byteBuf=Unpooled.copiedBuffer("$".getBytes());
        socketChannel.pipeline().addLast(new DelimiterBasedFrameDecoder(1024,byteBuf));
        socketChannel.pipeline().addLast(new DiscardServerHandler());
      }
    }


    import io.netty.buffer.ByteBuf;
    import io.netty.buffer.Unpooled;
    import io.netty.channel.ChannelHandlerAdapter;
    import io.netty.channel.ChannelHandlerContext;
    import io.netty.util.CharsetUtil;
    import io.netty.util.ReferenceCountUtil;

      public class DiscardServerHandler extends ChannelHandlerAdapter {

      int i=0;
      @Override
      public void channelRead(ChannelHandlerContext ctx,Object msg){
      try{
        ByteBuf in=(ByteBuf)msg;
        System.out.println("收到你的客户端内容是");
        System.out.println(in.toString(CharsetUtil.UTF_8));
        ByteBuf resp=Unpooled.copiedBuffer(("【"+String.valueOf(i)+"】已收到你的客户端信息,谢谢$").getBytes());
        ctx.writeAndFlush(resp);
       }finally {
        ReferenceCountUtil.release(msg);
        i++;
        }
      }

      @Override
      public void exceptionCaught(ChannelHandlerContext ctx,Throwable cause){
        cause.printStackTrace();
        ctx.close();
      }
    }

    4、传输内容

     

     

    转:https://www.cnblogs.com/guoyuchuan/p/9549672.html

  • 相关阅读:
    2015年工作中遇到的问题:21-30(这10个问题很有价值)
    简要总结最近遇到的5个问题
    简要总结最近遇到的5个问题
    我到底要选择一种什么样的生活方式,度过这一辈子呢:人生自由与职业发展方向(下)
    我到底要选择一种什么样的生活方式,度过这一辈子呢:人生自由与职业发展方向(下)
    IT咨询服务-客户案例(四):根据图片等素材,动态生成个性化图片
    IT咨询服务-客户案例(四):根据图片等素材,动态生成个性化图片
    分布式系统若干经验总结
    分布式系统若干经验总结
    最近遇到的若干技术问题
  • 原文地址:https://www.cnblogs.com/smallfa/p/15638070.html
Copyright © 2011-2022 走看看