博客
关于我
夜光:Netty 编程(七) 在校资源
阅读量:299 次
发布时间:2019-03-01

本文共 4659 字,大约阅读时间需要 15 分钟。

Netty框架的基础上,以下是一个客户端和服务器端的实现代码示例

客户端代码:

package netty2;import io.netty.bootstrap.Bootstrap;import io.netty.buffer.ByteBuf;import io.netty.buffer.Unpooled;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 {    public static void main(String[] args) throws Exception {        int port = 8001;        final EchoClientHandler clientHandler = new EchoClientHandler();        EventLoopGroup eventLoopGroup = new NioEventLoopGroup();        try {            Bootstrap b = new Bootstrap();            b.group(eventLoopGroup)                    .channel(NioSocketChannel.class)                    .remoteAddress(new InetSocketAddress("localhost", port))                    .handler(new ChannelInitializer
() { @Override protected void initChannel(SocketChannel socketChannel) throws Exception { socketChannel.pipeline().addLast(clientHandler); } }); final ChannelFuture f = b.connect(); f.addListener(new GenericFutureListener
() { @Override public void operationComplete(Future
future) throws Exception { if (future.isSuccess()) { System.out.println("已经连接到服务器!"); ByteBuf byteBuf = Unpooled.copiedBuffer("aaaaaaaaaaaaaaaa", Charset.defaultCharset()); ChannelFuture channelFuture = f.channel().writeAndFlush(byteBuf); } else { Throwable throwable = future.cause(); throwable.printStackTrace(); } } }); f.channel().closeFuture().sync(); } catch (InterruptedException e) { eventLoopGroup.shutdownGracefully().sync(); } }}

服务器端代码:

package netty2;import io.netty.bootstrap.ServerBootstrap;import io.netty.buffer.ByteBufAllocator;import io.netty.channel.ChannelFuture;import io.netty.channel.ChannelInitializer;import io.netty.channel.ChannelPipeline;import io.netty.channel.EventLoopGroup;import io.netty.channel.nio.NioEventLoopGroup;import io.netty.channel.socket.SocketChannel;import io.netty.channel.socket.nio.NioServerSocketChannel;import java.net.InetSocketAddress;public class EchoServer {    public static void main(String[] args) throws Exception {        int port = 8001;        EchoServerFirstInHandler firstHandler = new EchoServerFirstInHandler();        EchoServerSecondInHandler secondHandler = new EchoServerSecondInHandler();        EchoServerOutHandler outHandler = new EchoServerOutHandler();        EventLoopGroup eventLoopGroup = new NioEventLoopGroup();        try {            ServerBootstrap serverBootstrap = new ServerBootstrap();            serverBootstrap.group(eventLoopGroup)                    .channel(NioServerSocketChannel.class)                    .localAddress(new InetSocketAddress(port))                    .childHandler(new ChannelInitializer
() { @Override protected void initChannel(SocketChannel socketChannel) throws Exception { ChannelPipeline channelPipeline = socketChannel.pipeline(); channelPipeline.addFirst(outHandler); channelPipeline.addLast(firstHandler); channelPipeline.addLast(secondHandler); } }); ChannelFuture f = serverBootstrap.bind().sync(); f.channel().closeFuture().sync(); } catch (InterruptedException e) { eventLoopGroup.shutdownGracefully().sync(); } }}

辅助处理器类:

package netty2;import io.netty.buffer.ByteBuf;import io.netty.buffer.Unpooled;import io.netty.channel.ChannelHandlerContext;import io.netty.channel.ChannelInboundHandlerAdapter;import io.netty.util.CharsetUtil;import java.nio.charset.Charset;public class EchoServerOutHandler extends ChannelOutboundHandlerAdapter {    public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception {        System.out.println("EchoServerOutHandler write: " + ((ByteBuf) msg).toString(Charset.defaultCharset()));        ctx.write(msg, promise);    }}

以上代码示例展示了Netty框架在TCP协议中实现Echo协议的客户端和服务器端通信,基于NIO机制,支持非阻塞IO。通过Bootstrap类进行异步连接,采用分段读写的策略,确保高效处理大量数据流量。

转载地址:http://kydo.baihongyu.com/

你可能感兴趣的文章
MySQL中的IO问题分析与优化
查看>>
MySQL中的ON DUPLICATE KEY UPDATE详解与应用
查看>>
mysql中的rbs,SharePoint RBS:即使启用了RBS,内容数据库也在不断增长
查看>>
mysql中的undo log、redo log 、binlog大致概要
查看>>
Mysql中的using
查看>>
MySQL中的关键字深入比较:UNION vs UNION ALL
查看>>
mysql中的四大运算符种类汇总20多项,用了三天三夜来整理的,还不赶快收藏
查看>>
mysql中的字段如何选择合适的数据类型呢?
查看>>
MySQL中的字符集陷阱:为何避免使用UTF-8
查看>>
mysql中的数据导入与导出
查看>>
MySQL中的时间函数
查看>>
mysql中的约束
查看>>
MySQL中的表是什么?
查看>>
mysql中穿件函数时候delimiter的用法
查看>>
Mysql中索引的分类、增删改查与存储引擎对应关系
查看>>
Mysql中索引的最左前缀原则图文剖析(全)
查看>>
MySql中给视图添加注释怎么添加_默认不支持_可以这样取巧---MySql工作笔记002
查看>>
Mysql中获取所有表名以及表名带时间字符串使用BetweenAnd筛选区间范围
查看>>
Mysql中视图的使用以及常见运算符的使用示例和优先级
查看>>
Mysql中触发器的使用示例
查看>>