Java基于NIO怎么实现聊天室功能
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,Java基于NIO怎么实现聊天室功能,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Sever端package com.qst.one;i
千家信息网最后更新 2025年11月07日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) { // 获取到选择器上所有注册的通道中已经就绪好的事件 Iterator iterator = 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安全错误
数据库的锁怎样保障安全
服务器有哪些系统
坪山软件开发
做缓存服务器赚钱
长沙旭龙网络技术有限公司
打造聊天app服务器
十堰手机数据库修复来电咨询
济南梦起点网络技术有限公司
服务器改散热
nodejs做游戏服务器开发
网上商店数据库详细设计
数据库qpm
软件开发信息咨询都有哪些服务
北京智能土地资产管理软件开发
陕西标准1u服务器机箱订做
数据库基础设计
网络安全业绩描述
金航软件开发有限公司
服务器内存批发
网络安全治理的原则包括什么
盐城市网络安全监察部门
智慧社区数据库
sql数据库用户登录信息
pmm 数据库监控系统
大数据时代网络安全面临问题
微信数据库什么时候更新
软件开发 螺旋模型 案例
软件开发在实际中的作用
刚步入网络安全专业
深圳市海付网络技术
网络安全观后感100字