Netty入门(一)环境搭建及使用
一、项目创建
在 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 服务器的通信步骤为:
- 创建两个NIO线程组,一个专门用于接收来自客户端的连接,另一个则用于处理已经被接收的连接。
- 创建一个ServerBootstrap对象,配置Netty的一系列参数,例如接受传出数据的缓存大小等。
- 创建一个用于实际处理数据的类ChannelInitializer,进行初始化的准备工作,比如设置接受传出数据的字符集、格式以及实际处理数据的接口。
- 绑定端口,执行同步阻塞方法等待服务器端启动即可。
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入门(一)环境搭建及使用相关推荐
- Bootstrap4+MySQL前后端综合实训-Day02-AM【Bootstrap4(入门、环境搭建、文字排版、颜色、表格、图片、进度条、折叠、输入框组、模态框)、Font Awesome字体图标】
[Bootstrap4前端框架+MySQL数据库]前后端综合实训[10天课程 博客汇总表 详细笔记] 目 录 Typora语法 Day01-知识回顾 1.前端部分 flex布局 2.Bootstr ...
- nginx学习笔记-01nginx入门,环境搭建,常见命令
nginx学习笔记-01nginx入门,环境搭建,常见命令 文章目录 nginx学习笔记-01nginx入门,环境搭建,常见命令 1.nginx的基本概念 2.nginx的安装,常用命令和配置文件 3 ...
- Java入门及环境搭建idea安装和简单使用
Java入门及环境搭建 什么是Java Java Java是一门新的语言特点是: 语法有点像c 没有指针 没有内存管理 真正的可移植性,编写一次,到处运行. 面向对象 类型安全 高质量的类库 - Ja ...
- 乐鑫Esp32-S2学习之旅① 入门 ESP32-S2 环境搭建 ,分享如何直连苹果智能家居 HomeKit 平台,轻松语音 Siri 控制!
本系列博客学习由非乐鑫官方人员 半颗心脏 潜心所力所写,不做开发板.仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 基于乐鑫ESP32 芯片模组 C SDK二次开发的技 ...
- 【Java全栈学习笔记:第一阶段:JavaSE】:Java入门及环境搭建
Java全栈课程网站: KuangStudy JavaSE课程地址: 狂神说Java 参考书籍:Java大学实用教程(第四版) 目录 Java入门及环境搭建 Java帝国的诞生 Java发展 Java ...
- Java入门与环境搭建
Java入门与环境搭建 软件 ...
- MSP432入门——编译环境搭建
0x00.章索引 MSP432入门--编译环境搭建 0x01.目录 节目录 0x00.章索引 0x01.目录 0x02.概述 0x03.正式开始前... 非专业"教程" Simpl ...
- 深度神经网络入门--学习环境搭建
深度神经网络入门--学习环境搭建 安装环境 安装环境 1.ubuntu16.04 安装Anaconda及搭建环境安装TensorFlow深度学习框架-- CPU 链接:https://blog.csd ...
- 【appium】appium自动化入门之环境搭建(中)
哎嘿,没想到我更新了吧 书接上文[appium]appium自动化入门之环境搭建(上) 下文指路[appium]appium自动化入门之环境搭建(下) 正文 前言 1.1.1 环境准备 1.jdk1. ...
- Vue05之ElementUI入门+nodejs环境搭建+运行nodejs项目
14天阅读挑战赛 努力是为了不平庸~ 目录 1. ElementUI入门 1.1 ElementUI简介 1.2 Vue+ElementUI安装 1.3 开发示例 2. 搭建nodejs环境 2.1 ...
最新文章
- 计算机专业PhD申请文书范文,美国留学博士申请文书怎么写之范文分享
- leetcode 282. Expression Add Operators | 282. 给表达式添加运算符(中缀表达式求值)
- 虚拟机连接网络_Parallels Desktop 16教程PD16虚拟机共享网络和桥接网络设置方法
- 2016 校园招聘求职经历(二)
- 【转】【C++学习笔记】C++异常处理
- 软考中项20140309作业
- C#LeetCode刷题之#443-压缩字符串​​​​​​​(String Compression)
- azure云数据库_如何使用Cloud Shell创建Azure SQL数据库
- 普通人快速拿到校招offer的十大狠招
- 超定方程组的经典Gram-Schmidt正交化解法
- 十七、String类型常用方法(二)
- explain mysql_mysql explain详解
- 生成package.json文件
- OGG基本框架、安装、运维、报错处理、监控命令
- Win10开了热点之后,电脑不能上网怎么解决?
- mac u盘只读怎么修改_苹果电脑mac显示只读怎么办
- 面试复习归纳(技术服务、网络安全、运维与云计算)
- 通过ID获得链接地址
- 使用蒙特卡罗方法计算圆周率π Python
- android.view.InflateException: Binary XML file line #22: Binary XML file line #22:: Error inflating
热门文章
- oracle ndv,CBO_ORACLE
- vue项目导入elementui_在vue项目中使用elementui
- 20以内分数化小数表_如何使用标准正态分布表?
- erp采购总监个人总结_《用友 ERP 培训教程:财务核算/供应链管理/物料需求计划》ERP概述 : ERP基础知识...
- ios uiview 如何刷新_ios-如何在Swift中刷新imageview而无需重新加载页面?
- python oracle orm_Python ORM
- python文件地址拼接
- 筒灯智能驱动芯片作用_如然之光,魅族 Lipro 智能家居发布首期健康照明系列--智能设备 -...
- 【Liunx服务器】阿里云服务器下部署多个tomcat服务
- [bzoj1036][ZJOI2008]树的统计Count