java-nio-server聊天室服务端
package com.jiucaiyuan.net.nio; import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.nio.channels.ServerSocketChannel; import java.nio.channels.SocketChannel; import java.util.Iterator; /** * @Author jiucaiyuan 2022/3/12 23:47 * @mail services@jiucaiyuan.net */ public class Server { public static void main(String[] args) throws IOException { //1 获取通道 ServerSocketChannel ssChannel = ServerSocketChannel.open(); //2 切换为非阻塞模式 ssChannel.configureBlocking(false); //3 绑定链接端口 ssChannel.bind(new InetSocketAddress(9999)); //4 获取选择器 Selector selector = Selector.open(); //5 通道注册到选择器上,并且制定监听接收事件 ssChannel.register(selector, SelectionKey.OP_ACCEPT); //6 使用Selector选择器轮训已经就绪好的事件 while (selector.select()>0){ //7 获取选择器中的所有注册的通道中已经就绪好的事件 Iterator<SelectionKey> it = selector.selectedKeys().iterator(); //8 开始便利这些准备好的事件 while (it.hasNext()){ //9 提取当前这个事件 SelectionKey sk = it.next(); //10 判断当前这个事件具体是什么 if(sk.isAcceptable()){ //11 获取当前接入的客户端通道 SocketChannel socketChannel = ssChannel.accept(); //12 转换成非阻塞 socketChannel.configureBlocking(false); //13 把本客户端注册到选择器上 socketChannel.register(selector,SelectionKey.OP_READ); }else if (sk.isReadable()){ //14 获取当前选择器上的读就绪事件 SocketChannel socketChannel = (SocketChannel)sk.channel(); //15 读取数据 ByteBuffer byteBuffer = ByteBuffer.allocate(1024); int len = 0; while ((len = socketChannel.read(byteBuffer))>0){ //切换缓存处理方式 byteBuffer.flip(); System.out.println(new String(byteBuffer.array(),0,len)); //清楚已处理数据 byteBuffer.clear(); } } //移除处理完毕的事件(标记已处理) it.remove(); } } } }
日历
个人资料
diaba 寻求合作请留言或联系mail: services@jiucaiyuan.net
链接
最新文章
存档
- 2024年10月(1)
- 2024年8月(2)
- 2024年6月(4)
- 2024年5月(1)
- 2023年7月(1)
- 2022年10月(1)
- 2022年8月(1)
- 2022年6月(11)
- 2022年5月(6)
- 2022年4月(33)
- 2022年3月(26)
- 2021年3月(1)
- 2020年9月(2)
- 2018年8月(1)
- 2018年3月(1)
- 2017年3月(3)
- 2017年2月(6)
- 2016年12月(3)
- 2016年11月(2)
- 2016年10月(1)
- 2016年9月(3)
- 2016年8月(4)
- 2016年7月(3)
- 2016年6月(4)
- 2016年5月(7)
- 2016年4月(9)
- 2016年3月(4)
- 2016年2月(5)
- 2016年1月(17)
- 2015年12月(15)
- 2015年11月(12)
- 2015年10月(6)
- 2015年9月(11)
- 2015年8月(8)
分类
热门文章
- SpringMVC:Null ModelAndView returned to DispatcherServlet with name 'applicationContext': assuming HandlerAdapter completed request handling
- Mac-删除卸载GlobalProtect
- java.lang.SecurityException: JCE cannot authenticate the provider BC
- MyBatis-Improper inline parameter map format. Should be: #{propName,attr1=val1,attr2=val2}
- Idea之支持lombok编译
标签
最新评论
- logisqykyk
Javassist分析、编辑和创建jav... - xxedgtb
Redis—常见参数配置 - 韭菜园 ... - wdgpjxydo
SpringMVC:Null Model... - rllzzwocp
Mysql存储引擎MyISAM和Inno... - dpkgmbfjh
SpringMVC:Null Model... - tzklbzpj
SpringMVC:Null Model... - bqwrhszmo
MyBatis-Improper inl... - 乐谱吧
good非常好 - diaba
@diaba:应该说是“时间的度量依据”... - diaba
如果速度增加接近光速、等于光速、甚至大于...
最新微语
- 从今天起,做一个幸福的人。喂马,砍柴,(思想)周游世界
2022-03-21 23:31
- 2022.03.02 23:37:59
2022-03-02 23:38
- 几近崩溃后,找到解决方法,总是那么豁然开朗!所以遇到问题要坚持!
2018-07-18 10:49
- 2018年关键字“走心”
2018-03-19 16:07
- 保护好自己最大的方法是让自己更强大,不要柔弱的像一只绵羊一样,得谁巴拉,就谁巴拉!
2017-12-20 10:24
发表评论: