前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Netty5 入门HelloWorld

Netty5 入门HelloWorld

作者头像
Java架构师必看
发布2021-05-14 11:22:01
2880
发布2021-05-14 11:22:01
举报
文章被收录于专栏:Java架构师必看

Netty5 入门HelloWorld

强烈推介IDEA2020.2破解激活,IntelliJ IDEA 注册码,2020.2 IDEA 激活码

Netty5 入门HelloWorld

一、客户端代码及关键类说明

代码语言:javascript
复制
 1 /**
 2  * netty5的客户端
 3  * @author -zhengzx-
 4  *
 5  */
 6 public class ClientSocket {
 7 
 8     public static void main(String[] args) {
 9         //服务类
10         Bootstrap bootstrap = new Bootstrap();
11         //worker
12         EventLoopGroup worker = new NioEventLoopGroup();
13         
14         try {
15             //设置线程池
16             bootstrap.group(worker);
17             //设置socket工厂
18             bootstrap.channel(NioSocketChannel.class);
19             //设置管道
20             bootstrap.handler(new ChannelInitializer<Channel>() {
21 
22                 @Override
23                 protected void initChannel(Channel ch) throws Exception {
24                     ch.pipeline().addLast(new StringDecoder());
25                     ch.pipeline().addLast(new StringEncoder());
26                     ch.pipeline().addLast(new ClientSocketHandler());
27                 }
28             });
29             
30             ChannelFuture connect = bootstrap.connect("127.0.0.1", 10101);
31             
32             BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
33             while(true){
34                 System.out.println("请输入:");
35                 String msg = bufferedReader.readLine();
36                 connect.channel().writeAndFlush(msg);
37             }
38             
39         } catch (Exception e) {
40              e.printStackTrace();
41         } finally{
42             worker.shutdownGracefully();
43         }
44     }
45 }
代码语言:javascript
复制
【1】**EventLoopGroup:**`客服端需要指定 EvnetLoopGroup,Netty5 中实例为 NioEventLoopGroup:表示一个 NIO 的EvnetLoopGroup。
`【2】**ChannelType:**`指定 Channel 的类型,客户端为 NioSocketChannel。在 Netty 中,,Channel 是一个 Socket 的抽象,它为用户提供了关于 Socket 状态(是否连接还是断开) 以及对 Socket 的读写等操作。每当 Netty 建立了一个连接后, 都会有一个对应的 Channel 实例。
`【3】**Handler:**设置数据的处理类。
代码语言:javascript
复制
1 public class ClientSocketHandler extends SimpleChannelInboundHandler<String>{
2 
3     @Override
4     protected void messageReceived(ChannelHandlerContext ctx, String msg) throws Exception {
5         System.out.println("客户端接受消息:"+msg);
6     }
7 }

【4】**ChannelPipeline:**在实例化一个 Channel 时,必然伴随着实例化一个 ChannelPipeline。

二、服务端代码及说明

【1】**EventLoopGroup:**不论是服务器端还是客户端,都必须指定 EventLoopGroup. 在这个例子中, 指定了NioEventLoopGroup, 表示一个 NIO 的 EventLoopGroup, 不过服务器端需要指定两个 EventLoopGroup, 一个是 bossGroup, 用于处理客户端的连接请求; 另一个是 workerGroup, 用于处理与各个客户端连接的 IO 操作。 【2】**ChannelType:**指定 Channel 的类型. 因为是服务器端, 因此使用了 NioServerSocketChannel。 【3】**Handler:**设置数据的处理器。

代码语言:javascript
复制
 1 public class ServerSocketHandler extends SimpleChannelInboundHandler<String>{
 2 
 3     @Override
 4     protected void messageReceived(ChannelHandlerContext ctx, String msg) throws Exception {
 5         System.out.println(msg);
 6         //返回字符串
 7         ctx.writeAndFlush("hi");
 8     }
 9     
10 }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Netty5 入门HelloWorld
    • 一、客户端代码及关键类说明
      • 二、服务端代码及说明
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档