@Testpublic void client() throws IOException {SocketChannel sChannel = SocketChannel.open(new InetSocketAddress("127.0.0.1", 9898));//切换非阻塞模式sChannel.configureBlocking(false);ByteBuffer buffer = ByteBuffer.allocate(1024);//4.发送数据给服务器buffer.put("zzzzz".getBytes());buffer.flip();sChannel.write(buffer);sChannel.close();}@Testpublic void server() throws IOException {//1.获取通道ServerSocketChannel ssChannel = ServerSocketChannel.open();//2.切换非阻塞模式ssChannel.configureBlocking(false);//3.绑定连接ssChannel.bind(new InetSocketAddress(9898));//4. 获取选择器Selector selector = Selector.open();//5.将通道注册到选择器上,并且指定 监听接受时间ssChannel.register(selector, SelectionKey.OP_ACCEPT);///6.轮询式的获取选择器上已经'准备就绪'的事件while (selector.select() > 0) {//7. 获取当前选择器中所有注册的“选择键(已就绪的监听事件)”Iterator<SelectionKey> it = selector.selectedKeys().iterator();while (it.hasNext()) {//8. 获取准备“就绪”的是事件SelectionKey sk = it.next();//9.判断具体是什么事件准备就绪if (sk.isAcceptable()) {//10. 若“接收就绪”,获取客户端连接SocketChannel accept = ssChannel.accept();//切换到非阻塞模式accept.configureBlocking(false);//将改通道注册到选择器accept.register(selector, SelectionKey.OP_READ);} else if (sk.isReadable()) {//13. 获取当前选择器上“读就绪”状态的通道SocketChannel channel = (SocketChannel) sk.channel();//14.读取数据ByteBuffer buffer = ByteBuffer.allocate(1024);int len = 0;while ((len = channel.read(buffer)) > 0) {buffer.flip();System.out.println(new String(buffer.array(), 0, len));buffer.clear();}}//15. 取消选择键 SelectionKeyit.remove();}}}

java,NIO非阻塞式网络通信DEMO.相关推荐

  1. java nio非阻塞式网络通信入门案例 (nio服务端与bio多线程客户端(java/python)

    nio服务端: 改进服务端 java客户端 python版本客户端: python客户端改进版(多线程执行) 注意:如果想把服务端程序放在自己的服务器上,要记得开放相应的端口,否则客户端会显示连接超时 ...

  2. 五、NIO 的非阻塞式网络通信

    一.普通IO 传统的IO当客户端请求服务端的资源,这个时候不确定是否准备好资源.如果这个时候存在问题,当前线程则会一直等待,不能再处理其他问题.就造成了阻塞. 二.NIO NIO新增了选择器,所有的通 ...

  3. Java NIO 非阻塞服务器端

    看到一篇不错的文章,转载标记一下:http://www.ibm.com/developerworks/cn/java/j-javaio/ 服务器在合理的时间之内处理大量客户机请求的能力取决于服务器使用 ...

  4. java socket nio 阻塞_Java NIO实现非阻塞式socket通信

    博主知识水平有限,只能提供一个个人的狭隘的理解,如果有新人读到这儿,建议看一下其他教程或者API,如果不明白,再来看一下:如果有dalao读到这儿,希望能指出理解中的问题~谢谢 Java提供了用于网络 ...

  5. Java中的NIO非阻塞编程

    在JDK1.4以前,Java的IO操作集中在java.io这个包中,是基于流的阻塞API.对于大多数应用来说,这样的API使用很方便,然而,一些对性能要求较高的应用,尤其是服务端应用,往往需要一个更为 ...

  6. 非阻塞式异步Java 8和Scala的Try / Success / Failure

    受Heinz Kabutz最近的时事通讯以及我在最近的书中研究的Scala的期货的启发,我着手使用Java 8编写了一个示例,该示例如何将工作提交给执行服务并异步地响应其结果,并使用了回调.无需阻止任 ...

  7. 系统间通信1:阻塞与非阻塞式通信A

    版权声明:本文引用https://yinwj.blog.csdn.net/article/details/48274255 从这篇博文开始,我们将进入一个新文章系列.这个文章系列专门整理总结了目前系统 ...

  8. 系统间通信1:阻塞与非阻塞式通信B

    版权声明:本文引用https://yinwj.blog.csdn.net/article/details/48274255 接上篇:系统间通信1:阻塞与非阻塞式通信A 4.3 NIO通信框架 目前流行 ...

  9. 阻塞式和非阻塞式udp传输_NIO非阻塞网络编程三大核心理念

    本次开始NIO网络编程,之前已经说过BIO,对于阻塞IO里面的问题一定有了清晰的认识,在JDK1.4版本后,提供了新的JAVA IO操作非阻塞API,用意替换JAVA IO 和JAVA NetWork ...

最新文章

  1. linux下的qt缺少iostream,c – iostream:没有这样的文件或目录
  2. python画三维立体图-Python 竟能绘制出如此酷炫的三维图
  3. 站长日常工作必备记录详细单
  4. 【Mybatis】 mapper XML 文件中使用 collection实现一对多关联
  5. 【推荐】 女人愁嫁时代终于来临
  6. C语言与汇编语言的区别
  7. ABBYY FineReader 12扫描对页的步骤有哪些
  8. 铋- Bismuth
  9. 深度解读CSS3 position的属性
  10. c++之友元函数和友元类
  11. Win10如何优化系统?电脑运行比较卡怎么优化?
  12. MySQL Server 5.7.13
  13. [C++] 配平化学方程式算法的封装
  14. 使用Arduino和DS12C887芯片制作电子时钟(附Arduino源代码)
  15. 官方资料:Oracle 10g DBA 学习手册(精心整理,申请加精)
  16. 如何在 SAP ABAP 系统中使用 Adobe Form 试读版
  17. 灵遁者:写在33岁之初
  18. 已知三点求圆心和半径
  19. 在html表格中进行计算,如何在word表格中实现计算功能?超级实用,值得细细品味...
  20. SenticNet情感词典介绍

热门文章

  1. 一年级描写下雪的古诗,古诗翻译及重点知识点心田花开汇总
  2. 2006电子商务大盘点
  3. JSP学习并实现的过程--day01
  4. China Quarantines Mexicans
  5. java毕业设计流浪猫狗救助网站源码+lw文档+mybatis+系统+mysql数据库+调试
  6. python进阶 - day1
  7. 《转怒为喜---顾客抱怨投诉处理技巧》
  8. 计算机信息管理面试自我介绍,信息管理专业的面试自我介绍
  9. cocos2dx-lua 圆周运动
  10. java毕业设计芮城县十全十美火锅店点餐系统源码+lw文档+mybatis+系统+mysql数据库+调试