Java基于NIO怎么实现聊天室功能
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,Java基于NIO怎么实现聊天室功能,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Sever端package com.qst.one;i
千家信息网最后更新 2025年02月01日Java基于NIO怎么实现聊天室功能
Java基于NIO怎么实现聊天室功能,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
Sever端
package com.qst.one;import java.io.IOException;import java.net.InetSocketAddress;import java.net.SocketAddress;import java.nio.channels.Channel;import java.nio.channels.SelectableChannel;import java.nio.channels.SelectionKey;import java.nio.channels.Selector;import java.nio.channels.ServerSocketChannel;import java.nio.channels.SocketChannel;import java.util.Iterator;import java.util.Set;import java.nio.ByteBuffer;public class Server { private static SocketChannel accept; public static void main(String[] args) { System.out.println("----服务端启动---"); try { // 获取通道 ServerSocketChannel channel = ServerSocketChannel.open(); // 配置非阻塞模式 channel.configureBlocking(false); // 绑定连接的端口 channel.bind(new InetSocketAddress(9999)); // 获取选择器 Selector selector = Selector.open(); // 注册通道到选择器上,开始监听事件 channel.register(selector, SelectionKey.OP_ACCEPT); // 使用选择器进行轮询 while (selector.select() > 0) { // 获取到选择器上所有注册的通道中已经就绪好的事件 Iteratoriterator = selector.selectedKeys().iterator(); while (iterator.hasNext()) { // 获取事件 SelectionKey next = iterator.next(); // 判断事件类型 if (next.isAcceptable()) { // 获取通道 accept = channel.accept(); // 获取当前连接分配地址 SocketAddress address = accept.getLocalAddress(); System.out.println(address + "上线了"); // 切换模式 accept.configureBlocking(false); // 将通道注册到选择器上 accept.register(selector, SelectionKey.OP_READ); } // 如果为读模式 else if (next.isReadable()) { SocketChannel accept = (SocketChannel) next.channel(); // 读取事件 ByteBuffer buffer = ByteBuffer.allocate(1024); int len; while ((len = accept.read(buffer)) > 0) { // 开启读模式 buffer.flip(); // System.out.println((char)len); System.out.println(new String(buffer.array(), 0, len)); // 归位 buffer.clear(); } } iterator.remove(); } } } catch (Exception e) { try { SocketAddress address = accept.getRemoteAddress(); System.out.println(address+"离线了"); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } }}
Client端
package com.qst.one;import java.io.IOException;import java.net.InetSocketAddress;import java.net.SocketAddress;import java.nio.channels.SocketChannel;import java.util.Scanner;import java.nio.ByteBuffer;public class Client { public static void main(String[] args) throws IOException { SocketChannel channel = SocketChannel.open(new InetSocketAddress("localhost", 9999)); channel.configureBlocking(false); ByteBuffer buffer = ByteBuffer.allocate(1024); Scanner sc = new Scanner(System.in); SocketAddress address = channel.getLocalAddress(); System.out.println(address+"ready~~~"); while(true) { System.out.print("tim:"); String name = sc.nextLine(); buffer.put(("tim :"+name).getBytes()); buffer.flip(); channel.write(buffer); buffer.clear(); } }}
看完上述内容,你们掌握Java基于NIO怎么实现聊天室功能的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!
事件
通道
选择
模式
功能
聊天室
内容
方法
更多
问题
束手无策
为此
原因
地址
对此
技能
端口
篇文章
类型
经验
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
服务器2008忘了密码了怎么办
平谷区制造软件开发推荐
超然电视墙服务器HDD灯不亮
计算机与网络安全课后答案
部队网络安全交流发言稿
mac数据库解决中文乱码
武汉元启星互联网科技
php 中页面查询数据库
网络技术智慧校园规划方案书
安徽电商软件开发定做
软件开发工程师工作环境照片
广西简创网络技术有限公司
邯郸企业软件开发有用吗
数据库怎么设置时间表
长沙软件开发中职学校
网络安全基线加固工作
哪个软件可以炒股软件开发
网络安全与执法专业几级学科
什么pc软件开发
网络盗窃罪触犯网络安全法吗
网络安全逆向实验
重庆彭水蔬菜配送软件开发
丽水分布式服务器方案
友邦软件开发
电子邮件的服务器
24小时时间格式数据库
医院 数据库 表
软件开发电话话术
漳州财务软件开发哪里好
苹果13还原提示无法连接服务器