Netty5 入门HelloWorld
强烈推介IDEA2020.2破解激活,IntelliJ IDEA 注册码,2020.2 IDEA 激活码
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 }
【1】**EventLoopGroup:**`客服端需要指定 EvnetLoopGroup,Netty5 中实例为 NioEventLoopGroup:表示一个 NIO 的EvnetLoopGroup。
`【2】**ChannelType:**`指定 Channel 的类型,客户端为 NioSocketChannel。在 Netty 中,,Channel 是一个 Socket 的抽象,它为用户提供了关于 Socket 状态(是否连接还是断开) 以及对 Socket 的读写等操作。每当 Netty 建立了一个连接后, 都会有一个对应的 Channel 实例。
`【3】**Handler:**设置数据的处理类。
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:**设置数据的处理器。
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 }