一段关于java NIO server端接受客户端socket连接;演示了关于channel,selector等组件的整合使用
public class ReactorDemo {
    public static void main(String[] args) throws IOException {
        ServerSocketChannel ssc = ServerSocketChannel.open();//管道型ServerSocket
        ssc.socket().bind(new InetSocketAddress("127.0.0.1", 8089));
        ssc.configureBlocking(false);//设置非阻塞
        System.out.println(" NIO single server started, listening on :" + ssc.getLocalAddress());
        Selector selector = Selector.open();
        ssc.register(selector, SelectionKey.OP_ACCEPT);//在建立好的管道上,注册关心的事件 就绪
        while(true) {
            selector.select();
            Set<SelectionKey> keys = selector.selectedKeys();
            Iterator<SelectionKey> it = keys.iterator();
            while(it.hasNext()) {
                SelectionKey key = it.next();
                it.remove();//处理的事件,必须删除
                handle(key);
            }
        }
    }
    private static void handle(SelectionKey key) throws IOException {
        if(key.isAcceptable()) {//测试通道是否准备好接受新的套接字连接。
            System.out.println("accept occur...");
            ServerSocketChannel ssc = (ServerSocketChannel) key.channel();
            SocketChannel sc = ssc.accept();
            sc.configureBlocking(false);//设置非阻塞
            sc.register(key.selector(), SelectionKey.OP_READ );//在建立好的管道上,注册关心的事件 可读
        } else if (key.isReadable()) { //测试通道是否可以读取
            System.out.println("readable occur ...");
            SocketChannel sc = null;
            sc = (SocketChannel)key.channel();
            ByteBuffer buffer = ByteBuffer.allocate(512);
            buffer.clear();
            int len = sc.read(buffer);
            if(len != -1) {
                System.out.println("[" +Thread.currentThread().getName()+"] recv :"+ new String(buffer.array(), 0, len));
            }
            ByteBuffer bufferToWrite = ByteBuffer.wrap("HelloClient".getBytes());
            sc.write(bufferToWrite);
        }else if(key.isWritable()){
            System.out.println("write able occur...");
        }
    }
}
一段关于java NIO server端接受客户端socket连接;演示了关于channel,selector等组件的整合使用的更多相关文章
- Java NIO入门小例(短连接:客户端和服务器一问一答)
		
例子中有些写法参考自Netty4源码,建议在实际运用中采用Netty,而非原生的Java NIO(小心epoll空转). 1. 服务器端 public class NioServer { static ...
 - Java nio Server端示例
		
public class ServerNio { public static void main(String[] args) throws IOException, InterruptedExcep ...
 - Sql Server 本地(客户端)连接服务器端操作
		
网有很多相关内容,我在此做记录和总结 1.主要是sql server 配置管理工具的配置 在此参考 https://www.cnblogs.com/yougmi/p/4616273.html(再次感谢 ...
 - 3、谈谈 Java NIO
		
在 JDK1.4 之后,为了提高 Java IO 的效率,Java 提供了一套 New IO (NIO),之所以称之为 New,原因在于它相对于之前的 IO 类库是新增的.此外,旧的 IO 类库提供的 ...
 - Java NIO学习笔记七     Non-blocking Server
		
Java NIO:Non-blocking Server 即使你了解了Java NIO非阻塞功能的工作(怎么样Selector,Channel, Buffer等等),设计一个无阻塞服务器仍然很难.非阻 ...
 - [JavaEE]Java NIO原理图文分析及代码实现
		
转http://weixiaolu.iteye.com/blog/1479656 目录: 一.java NIO 和阻塞I/O的区别 1. 阻塞I/O通信模型 2. java NIO ...
 - JAVA:NIO初步了解
		
简介: Java NIO(New IO)是一个可以替代标准Java IO API的IO API(从Java 1.4开始),Java NIO提供了与标准IO不同的IO工作方式. Java NIO: Ch ...
 - Java NIO原理图文分析及代码实现
		
原文: http://weixiaolu.iteye.com/blog/1479656 目录: 一.java NIO 和阻塞I/O的区别 1. 阻塞I/O通信模型 2. java ...
 - JAVA NIO 结合多线程
		
NIO 的选择器采用了多路复用(Multiplexing)技术,可在一个选择器上处理多个套接字, 通过获取读写通道来进行 IO 操作.由于网络带宽等原因,在通道的读.写操作中是容易出现等待的, 所以在 ...
 
随机推荐
- 事件处理 及冒泡 阻止默认事件 以及tab 切换的思路
			
1.axios post通过点击事件提交数据不需要使用input直接使用state2.pdd你好天天象上默认执行点击(1,2,3)也可以执行并且能切换页码3.tab 针对新闻不同时4.天天象上首页和精 ...
 - JAVA遍历某个文件夹下所有文件listFiles() 实现按照名称升序排序
			
File[] files = file.listFiles(); List fileList = Arrays.asList(files); Collections.sort(fileList, ne ...
 - 【LeetCode】987. Vertical Order Traversal of a Binary Tree 解题报告(C++ & Python)
			
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 DFS BFS 日期 题目地址:https://le ...
 - 【LeetCode】697. Degree of an Array 解题报告
			
[LeetCode]697. Degree of an Array 解题报告 标签(空格分隔): LeetCode 题目地址:https://leetcode.com/problems/degree- ...
 - A. Points on Line
			
A. Points on Line time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...
 - codeforces B. Island Puzzle
			
B. Island Puzzle time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...
 - 第三十个知识点:大致简述密钥协商中的BR安全定义。
			
第三十个知识点:大致简述密钥协商中的BR安全定义. 在两方之间建密钥共享是一件密码学中古老的问题.就算只考虑定义也比标准加密困难的多.尽管古典的Diffie-Hellman协议在1976年思路解决了这 ...
 - [黑科技]pb_ds库(G++)
			
一.hash(速度快的恐怖).http://codevs.cn/problem/1230/ 1 #include<stdio.h> 2 #include<ext/pb_ds/asso ...
 - Java Web程序设计笔记 • 【第9章 EL表达式】
			
全部章节 >>>> 本章目录 9.1 EL 表达式基础 9.1.1 EL 表达式简介 9.1.2 EL 表达式的定义 9.1.3 使用 EL 访问变量 9.1.4 使用 E ...
 - ARM微处理器的七种运行模式
			
ARM微处理器的七种运行模式: 用户模式(usr):正常的程序执行状态 快速中断模式(fiq):用于处理快速中断,对高速数据传输或通道处理. 中断模式(irq):对一般情况下的中断进行处理. 管理模式 ...