Netty系列---源码实例
服务端代码:
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系列---源码实例相关推荐
- 学习“闪电侠”的Netty系列源码博文笔记
1.netty的reactor线程在添加一个任务的时候被创建,该线程实体为 FastThreadLocalThread,最后线程执行主体为NioEventLoop的run方法. 2.reactor线程 ...
- Netty学习笔记(一)Netty客户端源码分析
最近在学些BIO,NIO相关的知识,也学习了下Netty和它的源码,做个记录,方便以后继续学习,如果有错误的地方欢迎指正 如果不了解BIO,NIO这些基础知识,可以看下我的如下博客 IO中的阻塞.非阻 ...
- DPDK 跟踪库tracepoint源码实例分析
DPDK笔记 DPDK 跟踪库tracepoint源码实例分析 RToax 2021年4月 注意: 跟踪库 基于DPDK 20.05 DPDK跟踪库:trace library 1. trace流程源 ...
- 2016年最经典的高仿系列源码打包下载4.84G
│ JAVAapk.com文件列表生成.bat │ 例子大全说明.txt │ 本例子永久更新地址~.url │ 目录列表2015.11.04更新.txt ...
- 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基本介绍 第 ...
- (源码实例)通过层DIV实现,当鼠标放在链接上面,显示图片及文字
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! (源码实 ...
- rock带你读CornerNet-lite系列源码(二)
文章目录 前言 CorNerNet 结构 CornerNet_saccade结构 attention机制 CornerNet_Squeeze结构 构建Groundtruth 热图 focal loss ...
- 欢迎大家下载清风VIS系列源码
欢迎大家下载清风VIS系列源码 QQ"994703924 大家有什么疑问可以来找我~ 谢谢大家的支持
- ASP网站整站程序PHP源码-打听网(wordpress打造cms)-wordpress-cms整站打包程序-毕设源码实例
ASP网站整站程序PHP源码-打听网(wordpress打造cms)-wordpress-cms,整站打包程序,毕设源码实例,用wordpress中文做成的源码.全站打包,可以自行修改就行. 使用PH ...
最新文章
- ESXI上的vm虚拟机文件被锁定无法POWER ON的问题处理
- 什么是复制省略和返回值优化?
- C++中的const
- 如何屏蔽TCP 报头中的内容-位置字段中显示的 IP 地址
- 开源!mathAI 手写拍照自动能解高数题,还不快试试?
- Apollo后台配置:关联公共Namespace(类似与继承父类配置)
- C++与C#混合编程
- qt使用样式表设置窗口widget为圆角
- java电脑_电脑上搭建java开发环境
- Xml的编码和Bom
- SAP License:更改MM物料基本计量单位
- JS工具对象 DATE 方法
- Java学习笔记——网络编程
- 禁忌搜索算法求解TSP问题-python实现
- linux识别不了搜狗安装包,为啥安装使用搜狗拼音不成功?
- 如何在一个月内高效地备考教师资格证?
- PHP极其强大的图片处理库Grafika详细教程(1):图像基本处理
- word如何拆分表格
- 使用朴素贝叶斯进行个人信用风险评估
- mysql数据库试用期过了_mysql试用期过了