Java NIO框架Netty简单使用 http://blog.csdn.net/anxpp/article/details/52108238

关闭

anxpp的博客

As they sow , so let them reap .

  • 目录视图
  • 摘要视图
  • 订阅
异步赠书:9月重磅新书升级,本本经典       【观点】:程序员应该如何积累财富?       程序员9月书讯       节后荐书:Python、PyQt5、Kotlin(评论送书)

Java NIO框架Netty简单使用

2016-08-03 22:37  3866人阅读  评论(3)  收藏  举报
  分类:
编程语言—————Java———(43) 

版权声明:http://blog.csdn.net/anxpp

目录(?)[-]

  1. 1服务端
  2. 2客户端
  3. 3用于计算的工具类
  4. 4测试
  5. 5更多

转载请注明出处:http://blog.csdn.net/anxpp/article/details/52108238,谢谢!

之前写了一篇文章:Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码),介绍了如何使用Java原生IO支持进行网络编程,本文介绍一种更为简单的方式,即Java NIO框架。

Netty是业界最流行的NIO框架之一,具有良好的健壮性、功能、性能、可定制性和可扩展性。同时,它提供的十分简单的API,大大简化了我们的网络编程。

同Java IO介绍的文章一样,本文所展示的例子,实现了一个相同的功能。

1、服务端

Server:

[java]  view plain copy print ?
  1. package com.anxpp.io.calculator.netty;
  2. import io.netty.bootstrap.ServerBootstrap;
  3. import io.netty.channel.ChannelFuture;
  4. import io.netty.channel.ChannelInitializer;
  5. import io.netty.channel.ChannelOption;
  6. import io.netty.channel.EventLoopGroup;
  7. import io.netty.channel.nio.NioEventLoopGroup;
  8. import io.netty.channel.socket.SocketChannel;
  9. import io.netty.channel.socket.nio.NioServerSocketChannel;
  10. public class Server {
  11. private int port;
  12. public Server(int port) {
  13. this.port = port;
  14. }
  15. public void run() throws Exception {
  16. EventLoopGroup bossGroup = new NioEventLoopGroup();
  17. EventLoopGroup workerGroup = new NioEventLoopGroup();
  18. try {
  19. ServerBootstrap b = new ServerBootstrap();
  20. b.group(bossGroup, workerGroup)
  21. .channel(NioServerSocketChannel.class)
  22. .option(ChannelOption.SO_BACKLOG, 1024)
  23. .childOption(ChannelOption.SO_KEEPALIVE, true)
  24. .childHandler(new ChannelInitializer<SocketChannel>() {
  25. @Override
  26. public void initChannel(SocketChannel ch) throws Exception {
  27. ch.pipeline().addLast(new ServerHandler());
  28. }
  29. });
  30. ChannelFuture f = b.bind(port).sync();
  31. System.out.println("服务器开启:"+port);
  32. f.channel().closeFuture().sync();
  33. } finally {
  34. workerGroup.shutdownGracefully();
  35. bossGroup.shutdownGracefully();
  36. }
  37. }
  38. public static void main(String[] args) throws Exception {
  39. int port;
  40. if (args.length > 0) {
  41. port = Integer.parseInt(args[0]);
  42. } else {
  43. port = 9090;
  44. }
  45. new Server(port).run();
  46. }
  47. }

ServerHandler:

[java]  view plain copy print ?
  1. package com.anxpp.io.calculator.netty;
  2. import io.netty.buffer.ByteBuf;
  3. import io.netty.buffer.Unpooled;
  4. import io.netty.channel.ChannelHandlerContext;
  5. import io.netty.channel.ChannelInboundHandlerAdapter;
  6. import java.io.UnsupportedEncodingException;
  7. import com.anxpp.io.utils.Calculator;
  8. public class ServerHandler extends ChannelInboundHandlerAdapter {
  9. @Override
  10. public void channelRead(ChannelHandlerContext ctx, Object msg) throws UnsupportedEncodingException {
  11. ByteBuf in = (ByteBuf) msg;
  12. byte[] req = new byte[in.readableBytes()];
  13. in.readBytes(req);
  14. String body = new String(req,"utf-8");
  15. System.out.println("收到客户端消息:"+body);
  16. String calrResult = null;
  17. try{
  18. calrResult = Calculator.Instance.cal(body).toString();
  19. }catch(Exception e){
  20. calrResult = "错误的表达式:" + e.getMessage();
  21. }
  22. ctx.write(Unpooled.copiedBuffer(calrResult.getBytes()));
  23. }
  24. @Override
  25. public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
  26. ctx.flush();
  27. }
  28. /**
  29. * 异常处理
  30. */
  31. @Override
  32. public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
  33. cause.printStackTrace();
  34. ctx.close();
  35. }
  36. }

2、客户端

Client:

[java]  view plain copy print ?
  1. <li class="alt" style="margin: 0px !important; padding: 0px 3px 0px 10px !important; border-top: none; border-right: none; border-bottom: none; border-left: 3px solid rgb(153, 153, 153); border-image: initial; list-style-type: decimal-leading-zero; list-style-image: initial; color: rgb(238, 238,%

http://blog.csdn.net/anxpp/article/details/52108238相关推荐

  1. https://blog.csdn.net/blmoistawinde/article/details/84329103

    背景     很多场景需要考虑数据分布的相似度/距离:比如确定一个正态分布是否能够很好的描述一个群体的身高(正态分布生成的样本分布应当与实际的抽样分布接近),或者一个分类算法是否能够很好地区分样本的特 ...

  2. numpy的shape用法(转http://blog.csdn.net/by_study/article/details/67633593)

    https://www.bbsmax.com/A/1O5E78b7z7/ https://www.cnblogs.com/lindaxin/p/8074921.html http://blog.csd ...

  3. 系统权限管理设计 (转:http://blog.csdn.net/chexlong/article/details/37697555)

    权限设计(转:http://blog.csdn.net/chexlong/article/details/37697555)      1. 前言:      权限管理往往是一个极其复杂的问题,但也可 ...

  4. http://blog.csdn.net/u011001723/article/details/456210272222

    http://blog.csdn.net/u011001723/article/details/45621027

  5. http://blog.csdn.net/xingfuzhijianxia/article/details/6433918

    http://blog.csdn.net/xingfuzhijianxia/article/details/6433918

  6. http://blog.csdn.net/luoshengyang/article/details/6651971

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6651971 在Android系统中,提供了独特 ...

  7. http://blog.csdn.net/lovejavaydj/article/details/6

    2019独角兽企业重金招聘Python工程师标准>>> http://blog.csdn.net/lovejavaydj/article/details/6202610 转载于:ht ...

  8. http://blog.csdn.net/churximi/article/details/61210129

    http://blog.csdn.net/churximi/article/details/61210129http://blog.csdn.net/churximi/article/details/ ...

  9. http://blog.csdn.net/java2000_wl/article/details/8627874

    http://blog.csdn.net/java2000_wl/article/details/8627874

最新文章

  1. 用计算机进行图片处理教学设计,三年级信息技术上教学设计
  2. SSH服务如何远程管理RHEL 5
  3. OpenGL索引呈现
  4. 大牛书单 | 腾讯运维大咖陪你过724
  5. [POI2015]CZA
  6. java plus方法_Java.math.BigDecimal.plus()方法实例
  7. 性能测试工具SilkPerformer介绍
  8. TCP和UDP的区别(Socket)
  9. lvds接口屏线安装图解_五分钟让你学会液晶拼接屏安装方法
  10. java中后退键_java - 单击后退按钮两次以退出活动
  11. MySQL 5.7.21详细下载安装配置教程
  12. Android使用init.rc触发脚本实现隐藏内置应用
  13. python函数和代码复用思维导图_Python语言程序---代码复用与函数递归(二)
  14. 在EF4.1的DBContext中实现事务处理(BeginTransaction)和直接执行SQL语句的示例
  15. 8.郝斌C语言笔记——函数
  16. 物流管理源代码java_基于jsp的物流管理-JavaEE实现物流管理 - java项目源码
  17. linux几个工具的安装
  18. html 百度地图坐标拾取,百度拾取坐标系统坐标反查是什么意思
  19. 适配层java接口_Linux Framebuffer适配层释疑
  20. Axure RP 7.0学习

热门文章

  1. iOS 应用上架流程(提交到AppStore)
  2. 灰色系统预测模型GM(1,1),GM(1,n)及Matlab实现
  3. 介绍近期的一篇综述:AI系统安全的实用方法
  4. 用几何画板验证三角形重心定理,很方便!
  5. WORD里,如何在同一个文档中为不同页面,设置不同的页眉和页脚
  6. 谷歌浏览器打开后同时弹出百度搜索和2345问题解决
  7. php面试-职业规划
  8. because an app is obscuring a permission request,无法开启USB调试
  9. 10+年程序员总结的20+条经验教训
  10. 数据流标准差计算方法-不用事先计算均值