一、项目创建

  在 Eclipse 中右键,新建->项目->Maven->Maven Project->下一步->选择 quickstart

  

  下一步->设置如图(参数自取)

  

  点击完成。

  项目会自动创建 pom.xml 文件,打开该文件,点击 Dependencies标签->Add..,设置如图(参数由 Netty 版本决定):

  

  点击 OK,保存文件,观察 Maven Dependencies 下,

  

  netty 的 jar 包已经添加完毕。到此为止,项目配置完毕了,下面就来添加代码吧。

二、实现一个简单的服务端 demo

1. 首选我们需要自定义一个类处理服务器接收到的消息

 1 package com.coder.server;2 3 import io.netty.buffer.ByteBuf;4 import io.netty.channel.ChannelHandlerContext;5 import io.netty.channel.ChannelInboundHandlerAdapter;6 import io.netty.util.CharsetUtil;7 import io.netty.util.ReferenceCountUtil;8 9 /**
10  * 输出接收到的消息
11  * @author Coder
12  *
13  */
14 public class HelloServerHandler extends ChannelInboundHandlerAdapter {
15     /**
16      * 收到数据时调用
17      */
18     @Override
19     public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
20         try {
21             ByteBuf in = (ByteBuf)msg;
22             System.out.print(in.toString(CharsetUtil.UTF_8));
23         } finally {
24             // 抛弃收到的数据
25             ReferenceCountUtil.release(msg);
26         }
27
28 //        ctx.write(msg);
29 //        ctx.flush();
30     }
31
32     /**
33      * 当Netty由于IO错误或者处理器在处理事件时抛出异常时调用
34      */
35     @Override
36     public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
37         // 当出现异常就关闭连接
38         cause.printStackTrace();
39         ctx.close();
40     }
41 }

  该类主要是实现了接收客户端发来的消息,并输出到控制台。

2. 然后我们就能实现一个简单的服务端程序了

  Netty 服务器的通信步骤为:

  1. 创建两个NIO线程组,一个专门用于接收来自客户端的连接,另一个则用于处理已经被接收的连接。
  2. 创建一个ServerBootstrap对象,配置Netty的一系列参数,例如接受传出数据的缓存大小等。
  3. 创建一个用于实际处理数据的类ChannelInitializer,进行初始化的准备工作,比如设置接受传出数据的字符集、格式以及实际处理数据的接口。
  4. 绑定端口,执行同步阻塞方法等待服务器端启动即可。

 1 package com.coder.server;2 3 import io.netty.bootstrap.ServerBootstrap;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.NioServerSocketChannel;
11
12 public class HelloServer {
13     private int port;
14
15     public HelloServer(int port) {
16         this.port = port;
17     }
18
19     public void run() throws Exception {
20         EventLoopGroup bossGroup = new NioEventLoopGroup();        // 用来接收进来的连接
21         EventLoopGroup workerGroup = new NioEventLoopGroup();    // 用来处理已经被接收的连接
22         System.out.println("准备运行端口:" + port);
23
24         try {
25             ServerBootstrap b = new ServerBootstrap();
26             b.group(bossGroup, workerGroup)
27             .channel(NioServerSocketChannel.class)            // 这里告诉Channel如何接收新的连接
28             .childHandler( new ChannelInitializer<SocketChannel>() {
29                 @Override
30                 protected void initChannel(SocketChannel ch) throws Exception {
31                     // 自定义处理类
32                     ch.pipeline().addLast(new HelloServerHandler());
33                 }
34             })
35             .option(ChannelOption.SO_BACKLOG, 128)
36             .childOption(ChannelOption.SO_KEEPALIVE, true);
37
38             // 绑定端口,开始接收进来的连接
39             ChannelFuture f = b.bind(port).sync();
40
41             // 等待服务器socket关闭
42             f.channel().closeFuture().sync();
43         } catch (Exception e) {
44             workerGroup.shutdownGracefully();
45             bossGroup.shutdownGracefully();
46         }
47     }
48
49     public static void main(String[] args) throws Exception {
50         int port = 10110;
51         new HelloServer(port).run();
52     }
53
54 }

  那么,这便是一个可执行的服务端程序了。运行后控制台输出如下:

  

三、测试

  我们可以去自定义客户端程序,这里为了方便使用 telnet 充当客户端。

  需要注意的是,Windows 默认是没有开启 telnet 客户端的,需要我们手动开启。

  菜单->控制面板->程序->打开或关闭Windows功能,设置如图:

  

  这样我们就能用 telnet 客户端了。

  在 cmd 窗口输入命令如下:

  

  打开窗口如下:

  

  这时候我们在该窗口输入什么,eclipse 控制台也会对应输出相应内容。如下:

  

  注意:telnet 窗口会看不到输入的字符,只要输入 ctrl+L 就可以看到输入的字符了。

Netty入门(一)环境搭建及使用相关推荐

  1. Bootstrap4+MySQL前后端综合实训-Day02-AM【Bootstrap4(入门、环境搭建、文字排版、颜色、表格、图片、进度条、折叠、输入框组、模态框)、Font Awesome字体图标】

    [Bootstrap4前端框架+MySQL数据库]前后端综合实训[10天课程 博客汇总表 详细笔记] 目   录 Typora语法 Day01-知识回顾 1.前端部分 flex布局 2.Bootstr ...

  2. nginx学习笔记-01nginx入门,环境搭建,常见命令

    nginx学习笔记-01nginx入门,环境搭建,常见命令 文章目录 nginx学习笔记-01nginx入门,环境搭建,常见命令 1.nginx的基本概念 2.nginx的安装,常用命令和配置文件 3 ...

  3. Java入门及环境搭建idea安装和简单使用

    Java入门及环境搭建 什么是Java Java Java是一门新的语言特点是: 语法有点像c 没有指针 没有内存管理 真正的可移植性,编写一次,到处运行. 面向对象 类型安全 高质量的类库 - Ja ...

  4. 乐鑫Esp32-S2学习之旅① 入门 ESP32-S2 环境搭建 ,分享如何直连苹果智能家居 HomeKit 平台,轻松语音 Siri 控制!

    本系列博客学习由非乐鑫官方人员 半颗心脏 潜心所力所写,不做开发板.仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 基于乐鑫ESP32 芯片模组 C SDK二次开发的技 ...

  5. 【Java全栈学习笔记:第一阶段:JavaSE】:Java入门及环境搭建

    Java全栈课程网站: KuangStudy JavaSE课程地址: 狂神说Java 参考书籍:Java大学实用教程(第四版) 目录 Java入门及环境搭建 Java帝国的诞生 Java发展 Java ...

  6. Java入门与环境搭建

                                                                                         Java入门与环境搭建 软件 ...

  7. MSP432入门——编译环境搭建

    0x00.章索引 MSP432入门--编译环境搭建 0x01.目录 节目录 0x00.章索引 0x01.目录 0x02.概述 0x03.正式开始前... 非专业"教程" Simpl ...

  8. 深度神经网络入门--学习环境搭建

    深度神经网络入门--学习环境搭建 安装环境 安装环境 1.ubuntu16.04 安装Anaconda及搭建环境安装TensorFlow深度学习框架-- CPU 链接:https://blog.csd ...

  9. 【appium】appium自动化入门之环境搭建(中)

    哎嘿,没想到我更新了吧 书接上文[appium]appium自动化入门之环境搭建(上) 下文指路[appium]appium自动化入门之环境搭建(下) 正文 前言 1.1.1 环境准备 1.jdk1. ...

  10. Vue05之ElementUI入门+nodejs环境搭建+运行nodejs项目

    14天阅读挑战赛 努力是为了不平庸~ 目录 1. ElementUI入门 1.1 ElementUI简介 1.2 Vue+ElementUI安装 1.3 开发示例 2. 搭建nodejs环境 2.1 ...

最新文章

  1. 计算机专业PhD申请文书范文,美国留学博士申请文书怎么写之范文分享
  2. leetcode 282. Expression Add Operators | 282. 给表达式添加运算符(中缀表达式求值)
  3. 虚拟机连接网络_Parallels Desktop 16教程PD16虚拟机共享网络和桥接网络设置方法
  4. 2016 校园招聘求职经历(二)
  5. 【转】【C++学习笔记】C++异常处理
  6. 软考中项20140309作业
  7. C#LeetCode刷题之#443-压缩字符串​​​​​​​(String Compression)
  8. azure云数据库_如何使用Cloud Shell创建Azure SQL数据库
  9. 普通人快速拿到校招offer的十大狠招
  10. 超定方程组的经典Gram-Schmidt正交化解法
  11. 十七、String类型常用方法(二)
  12. explain mysql_mysql explain详解
  13. 生成package.json文件
  14. OGG基本框架、安装、运维、报错处理、监控命令
  15. Win10开了热点之后,电脑不能上网怎么解决?
  16. mac u盘只读怎么修改_苹果电脑mac显示只读怎么办
  17. 面试复习归纳(技术服务、网络安全、运维与云计算)
  18. 通过ID获得链接地址
  19. 使用蒙特卡罗方法计算圆周率π Python
  20. android.view.InflateException: Binary XML file line #22: Binary XML file line #22:: Error inflating

热门文章

  1. oracle ndv,CBO_ORACLE
  2. vue项目导入elementui_在vue项目中使用elementui
  3. 20以内分数化小数表_如何使用标准正态分布表?
  4. erp采购总监个人总结_《用友 ERP 培训教程:财务核算/供应链管理/物料需求计划》ERP概述 : ERP基础知识...
  5. ios uiview 如何刷新_ios-如何在Swift中刷新imageview而无需重新加载页面?
  6. python oracle orm_Python ORM
  7. python文件地址拼接
  8. 筒灯智能驱动芯片作用_如然之光,魅族 Lipro 智能家居发布首期健康照明系列--智能设备 -...
  9. 【Liunx服务器】阿里云服务器下部署多个tomcat服务
  10. [bzoj1036][ZJOI2008]树的统计Count