• zbb20180930 java,nio,netty Netty5.0用法


    Netty5.0用法

    Maven坐标

          <dependencies>

               <!-- https://mvnrepository.com/artifact/io.netty/netty-all -->

               <dependency>

                     <groupId>io.netty</groupId>

                     <artifactId>netty-all</artifactId>

                     <version>5.0.0.Alpha2</version>

               </dependency>

     

               <!-- https://mvnrepository.com/artifact/org.jboss.marshalling/jboss-marshalling -->

               <dependency>

                     <groupId>org.jboss.marshalling</groupId>

                     <artifactId>jboss-marshalling</artifactId>

                     <version>1.3.19.GA</version>

               </dependency>

               <!-- https://mvnrepository.com/artifact/org.jboss.marshalling/jboss-marshalling-serial -->

               <dependency>

                     <groupId>org.jboss.marshalling</groupId>

                     <artifactId>jboss-marshalling-serial</artifactId>

                     <version>1.3.18.GA</version>

                     <scope>test</scope>

               </dependency>

     

          </dependencies>

    创建服务器端

    class ServerHandler extends ChannelHandlerAdapter {

         /**

          * 当通道被调用,执行该方法

          */

         @Override

         publicvoid channelRead(ChannelHandlerContext ctx, Object msgthrows Exception {

             // 接收数据

             String value = (String) msg;

             System.out.println("Server msg:" + value);

             // 回复给客户端 “您好!”

             String res = "好的...";

             ctx.writeAndFlush(Unpooled.copiedBuffer(res.getBytes()));

         }

     

    }

     

    publicclass NettyServer {

     

         publicstaticvoid main(String[] argsthrows InterruptedException {

             System.out.println("服务器端已经启动....");

             // 1.创建2个线程,一个负责接收客户端连接, 一个负责进行 传输数据

             NioEventLoopGroup pGroup = new NioEventLoopGroup();

             NioEventLoopGroup cGroup = new NioEventLoopGroup();

             // 2. 创建服务器辅助类

             ServerBootstrap b = new ServerBootstrap();

             b.group(pGroupcGroup).channel(NioServerSocketChannel.class).option(ChannelOption.SO_BACKLOG, 1024)

                       // 3.设置缓冲区与发送区大小

                       .option(ChannelOption.SO_SNDBUF, 32 * 1024).option(ChannelOption.SO_RCVBUF, 32 * 1024)

                       .childHandler(new ChannelInitializer<SocketChannel>() {

                           @Override

                           protectedvoid initChannel(SocketChannel scthrows Exception {

                                sc.pipeline().addLast(new StringDecoder());

                                sc.pipeline().addLast(new ServerHandler());

                           }

                       });

             ChannelFuture cf = b.bind(8080).sync();

             cf.channel().closeFuture().sync();

             pGroup.shutdownGracefully();

             cGroup.shutdownGracefully();

        

         }

     

    }

     

     

     

    创建客户端

    class ClientHandler extends ChannelHandlerAdapter {

     

         /**

          * 当通道被调用,执行该方法

          */

         @Override

         publicvoid channelRead(ChannelHandlerContext ctx, Object msgthrows Exception {

             // 接收数据

             String value = (String) msg;

             System.out.println("client msg:" + value);

         }

     

        

    }

     

    publicclass NettyClient {

     

         publicstaticvoid main(String[] argsthrows InterruptedException {

             System.out.println("客户端已经启动....");

             // 创建负责接收客户端连接

             NioEventLoopGroup pGroup = new NioEventLoopGroup();

             Bootstrap b = new Bootstrap();

             b.group(pGroup).channel(NioSocketChannel.class).handler(new ChannelInitializer<SocketChannel>() {

                  @Override

                  protectedvoid initChannel(SocketChannel scthrows Exception {

                       sc.pipeline().addLast(new StringDecoder());

                       sc.pipeline().addLast(new ClientHandler());

                  }

             });

             ChannelFuture cf = b.connect("127.0.0.1", 8080).sync();

              cf.channel().writeAndFlush(Unpooled.wrappedBuffer("itmayiedu".getBytes()));

              cf.channel().writeAndFlush(Unpooled.wrappedBuffer("itmayiedu".getBytes()));

             // 等待客户端端口号关闭

             cf.channel().closeFuture().sync();

             pGroup.shutdownGracefully();

     

         }

     

    }

     

     

     
  • 相关阅读:
    基础数据类型补充
    编码转换
    is 和 == 的区别
    字典 dict
    列表与元组
    python基础第一节
    poll函数
    基本 TCP 的回射服务器
    文件IO
    base | AtomicIntegerT类
  • 原文地址:https://www.cnblogs.com/super-admin/p/9733030.html
Copyright © 2020-2023  润新知