服务端代码:

package com.tsh.common.learn.netty;import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelOption;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioServerSocketChannel;public class EchoServer {private int port;public EchoServer(int port){this.port = port;}/*** 启动流程*/public void run() throws InterruptedException {//配置服务端线程组EventLoopGroup bossGroup = new NioEventLoopGroup();EventLoopGroup workGroup = new NioEventLoopGroup();try{ServerBootstrap serverBootstrap = new ServerBootstrap();serverBootstrap.group(bossGroup, workGroup).channel(NioServerSocketChannel.class).option(ChannelOption.SO_BACKLOG,1024).childHandler(new ChannelInitializer<SocketChannel>() {protected void initChannel(SocketChannel ch) throws Exception {ch.pipeline().addLast(new EchoServerHandler());}});System.out.println("Echo 服务器启动ing");//绑定端口,同步等待成功ChannelFuture channelFuture = serverBootstrap.bind(port).sync();//等待服务端监听端口关闭channelFuture.channel().closeFuture().sync();}finally {//优雅退出,释放线程池workGroup.shutdownGracefully();bossGroup.shutdownGracefully();}}public static void main(String [] args) throws InterruptedException {int port = 8080;if(args.length > 0){port = Integer.parseInt(args[0]);}new EchoServer(port).run();}}
package com.tsh.common.learn.netty;import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.util.CharsetUtil;public class EchoServerHandler extends ChannelInboundHandlerAdapter {@Overridepublic void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {ByteBuf data = (ByteBuf) msg;System.out.println("服务端收到数据: "+ data.toString(CharsetUtil.UTF_8));ctx.writeAndFlush(data);}@Overridepublic void channelReadComplete(ChannelHandlerContext ctx) throws Exception {System.out.println("EchoServerHandle channelReadComplete");}@Overridepublic void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {cause.printStackTrace();ctx.close();}}

客户端代码:

package com.tsh.common.learn.netty;import io.netty.bootstrap.Bootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioSocketChannel;import java.net.InetSocketAddress;public class EchoClient {private String host;private int port;public EchoClient(String host, int port){this.host = host;this.port = port;}public void start() throws InterruptedException {EventLoopGroup group = new NioEventLoopGroup();try {Bootstrap bootstrap = new Bootstrap();bootstrap.group(group).channel(NioSocketChannel.class).remoteAddress(new InetSocketAddress(host, port)).handler(new ChannelInitializer<SocketChannel>() {protected void initChannel(SocketChannel ch) throws Exception {ch.pipeline().addLast(new EchoClientHandler());}});//连接到服务端,connect是异步连接,在调用同步等待sync,等待连接成功ChannelFuture channelFuture = bootstrap.connect().sync();//阻塞直到客户端通道关闭channelFuture.channel().closeFuture().sync();}finally {//优雅退出,释放NIO线程组group.shutdownGracefully();}}public static void main(String []args) throws InterruptedException {new EchoClient("127.0.0.1",8080).start();}}
package com.tsh.common.learn.netty;import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import io.netty.util.CharsetUtil;public class EchoClientHandler extends SimpleChannelInboundHandler<ByteBuf> {protected void channelRead0(ChannelHandlerContext ctx, ByteBuf msg) throws Exception {System.out.println("Client received: " + msg.toString(CharsetUtil.UTF_8));}@Overridepublic void channelActive(ChannelHandlerContext ctx) throws Exception {System.out.println("Active");ctx.writeAndFlush(Unpooled.copiedBuffer("发送的内容",CharsetUtil.UTF_8));}@Overridepublic void channelReadComplete(ChannelHandlerContext ctx) throws Exception {System.out.println("EchoClientHandler channelReadComplete");}@Overridepublic void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {cause.printStackTrace();ctx.close();}
}

Netty系列---源码实例相关推荐

  1. 学习“闪电侠”的Netty系列源码博文笔记

    1.netty的reactor线程在添加一个任务的时候被创建,该线程实体为 FastThreadLocalThread,最后线程执行主体为NioEventLoop的run方法. 2.reactor线程 ...

  2. Netty学习笔记(一)Netty客户端源码分析

    最近在学些BIO,NIO相关的知识,也学习了下Netty和它的源码,做个记录,方便以后继续学习,如果有错误的地方欢迎指正 如果不了解BIO,NIO这些基础知识,可以看下我的如下博客 IO中的阻塞.非阻 ...

  3. DPDK 跟踪库tracepoint源码实例分析

    DPDK笔记 DPDK 跟踪库tracepoint源码实例分析 RToax 2021年4月 注意: 跟踪库 基于DPDK 20.05 DPDK跟踪库:trace library 1. trace流程源 ...

  4. 2016年最经典的高仿系列源码打包下载4.84G

    │  JAVAapk.com文件列表生成.bat │  例子大全说明.txt │  本例子永久更新地址~.url │  目录列表2015.11.04更新.txt                    ...

  5. netty高性能编程基础(BIO、NIO、Netty、源码、使用netty实现dubbo RPC)

    文章目录 第1章Netty介绍和应用场景 1.1Netty介绍 1.2应用场景 第2章Java BIO编程 2.1 IO模型 2.2BIO.NIO.AIO适用场景分析 2.3JavaBIO基本介绍 第 ...

  6. (源码实例)通过层DIV实现,当鼠标放在链接上面,显示图片及文字

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! (源码实 ...

  7. rock带你读CornerNet-lite系列源码(二)

    文章目录 前言 CorNerNet 结构 CornerNet_saccade结构 attention机制 CornerNet_Squeeze结构 构建Groundtruth 热图 focal loss ...

  8. 欢迎大家下载清风VIS系列源码

    欢迎大家下载清风VIS系列源码 QQ"994703924 大家有什么疑问可以来找我~ 谢谢大家的支持

  9. ASP网站整站程序PHP源码-打听网(wordpress打造cms)-wordpress-cms整站打包程序-毕设源码实例

    ASP网站整站程序PHP源码-打听网(wordpress打造cms)-wordpress-cms,整站打包程序,毕设源码实例,用wordpress中文做成的源码.全站打包,可以自行修改就行. 使用PH ...

最新文章

  1. ESXI上的vm虚拟机文件被锁定无法POWER ON的问题处理
  2. 什么是复制省略和返回值优化?
  3. C++中的const
  4. 如何屏蔽TCP 报头中的内容-位置字段中显示的 IP 地址
  5. 开源!mathAI 手写拍照自动能解高数题,还不快试试?
  6. Apollo后台配置:关联公共Namespace(类似与继承父类配置)
  7. C++与C#混合编程
  8. qt使用样式表设置窗口widget为圆角
  9. java电脑_电脑上搭建java开发环境
  10. Xml的编码和Bom
  11. SAP License:更改MM物料基本计量单位
  12. JS工具对象 DATE 方法
  13. Java学习笔记——网络编程
  14. 禁忌搜索算法求解TSP问题-python实现
  15. linux识别不了搜狗安装包,为啥安装使用搜狗拼音不成功?
  16. 如何在一个月内高效地备考教师资格证?
  17. PHP极其强大的图片处理库Grafika详细教程(1):图像基本处理
  18. word如何拆分表格
  19. 使用朴素贝叶斯进行个人信用风险评估
  20. mysql数据库试用期过了_mysql试用期过了

热门文章

  1. 微信群裂变引流效果怎么样?微信社群引流怎么操作?
  2. 福昕阅读器常用快捷键
  3. mysql 批量造假数据
  4. g40-45支持虚拟化技术_CPU支持虚拟化,虚拟化有什么用怎么开启
  5. 一文读懂 非root用户正确编译安装 protobuf —— 附 CMakeLists.txt 配置
  6. 关于一些实用的资源网站,目前知道的
  7. python 大气污染物模型_Python AQI空气污染指数数据分析与机器学习
  8. python制作小帆船保姆级教学
  9. 地表反射率影响因素_地理简答题气候因素
  10. (附源码)记账微信小程序 毕业设计180815