Java如何实现多人聊天室
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章主要讲解了"Java如何实现多人聊天室",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java如何实现多人聊天室"吧!源码工具类:该类用于关闭各
千家信息网最后更新 2025年11月07日Java如何实现多人聊天室源码
这篇文章主要讲解了"Java如何实现多人聊天室",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java如何实现多人聊天室"吧!
源码
工具类:
该类用于关闭各种流。
public class CloseUtil { public static void CloseAll(Closeable... closeable){ for(Closeable c:closeable){ if (c != null) { try { c.close(); } catch (IOException e) { e.printStackTrace(); } } } }}服务器:
服务器端创建一个serverSocket对象通过accept()方法监听是否有tcp连接,同时有一个储存socket对象的集合将连接进来的对象储存到List集合中,服务器将消息进行转发。
//服务器public class Server { //存储每一个连接进来的客户端 public static List list=new ArrayList<>(); public static void main(String[] args) throws Exception { //创建ServerSocket对象 ServerSocket serverSocket = new ServerSocket(9999); while (true){ //连接进来的客户端 Socket client = serverSocket.accept(); System.out.println(client.getInetAddress()+"进入聊天室"); MyChannel myChannel = new MyChannel(client); list.add(myChannel); new Thread(myChannel).start(); } }} 消息转发类:
具体的消息转发实现类,将信息发给除发送消息以外的其他客户端。
//用于信息转发public class MyChannel implements Runnable{ private DataInputStream dis; private DataOutputStream dos; private boolean flag=true; public MyChannel(Socket socket) { try{ dis=new DataInputStream(socket.getInputStream()); dos=new DataOutputStream(socket.getOutputStream()); }catch (IOException e){ flag=false; CloseUtil.CloseAll(dis,dos); } } //接收数据的方法 private String receive(){ String str=""; try{ str= dis.readUTF(); }catch (IOException e){ flag=false; CloseUtil.CloseAll(dis,dos); Server.list.remove(this); } return str; } //发送数据的方法 private void send(String str){ try { if (str != null && str.length() != 0) { dos.writeUTF(str); dos.flush(); } }catch (Exception exception){ flag=false; CloseUtil.CloseAll(dos,dis); Server.list.remove(this); } } //转发消息的方法 private void sendToOther(){ String str=this.receive(); List list = Server.list; for (MyChannel other:list) { if(other==list){ continue;//不发送信息给自己 } //将消息发送给其他客户端 other.send(str); } } @Override public void run() { while (flag){ sendToOther(); } }} 发送信息类:
用于从键盘上获取数据然后将数据发送出去
public class Send implements Runnable{ //从键盘上获取数据 private BufferedReader br; private DataOutputStream dos; private boolean flag=true; public Send() { br=new BufferedReader(new InputStreamReader(System.in)); } public Send(Socket socket){ this(); try{ dos=new DataOutputStream(socket.getOutputStream()); }catch (Exception e){ flag=false; CloseUtil.CloseAll(dos,socket); e.printStackTrace(); } } private String getMessage(){ String str=""; try{ str=br.readLine(); }catch (IOException e){ flag=false; CloseUtil.CloseAll(br); } return str; } private void send(String str){ try { dos.writeUTF(str); dos.flush(); } catch (IOException e) { flag=false; CloseUtil.CloseAll(dos); e.printStackTrace(); } } @Override public void run() { while (flag){ this.send(getMessage()); } }}信息接收类:
public class Receive implements Runnable{ //接受数据流 private DataInputStream dis; private boolean flag=true; public Receive(Socket socket){ try { dis = new DataInputStream(socket.getInputStream()); }catch (Exception e){ flag=false; CloseUtil.CloseAll(dis,socket); } } private String getMessage(){ String str=""; try { str=dis.readUTF(); } catch (IOException e) { flag=false; CloseUtil.CloseAll(dis); e.printStackTrace(); } return str; } @Override public void run() { while (flag){ System.out.println(this.getMessage()); } }}客户端:
public class client { public static void main(String[] args) throws Exception{ Socket socket = new Socket(InetAddress.getLocalHost(),9999); Send send = new Send(socket); Receive receive = new Receive(socket); new Thread(send).start(); new Thread(receive).start(); }}先将服务器启动然后启动客户端
感谢各位的阅读,以上就是"Java如何实现多人聊天室"的内容了,经过本文的学习后,相信大家对Java如何实现多人聊天室这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
客户
客户端
数据
消息
聊天室
信息
服务器
服务
多人
对象
方法
学习
内容
键盘
同时
就是
工具
思路
情况
数据流
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
河北通用软件开发现价
国内企业网络安全现状
博科数据库
网络安全接单文案
毕节网络安全系统怎么做
广州外梦网络技术公司电话
租用服务器配置
如何快速学习网络安全产品
教育部本科数据库
lol盒子数据库
数据库u8v12.5
网络安全保护制度20
网络安全法自学心得
网络安全与执法的发展前景
我的世界正版服务器租用
数据库题库及答案
重庆服务器硬盘价格
服务器大数据要多大的硬盘
浙江项目软件开发销售
战地一怎么看自己是哪个服务器
bim技术数据库应用展望
深圳软件开发企业账务处理
云服务器 如何设置安全组
观看第五空间网络安全简报
移动互联网应用软件开发代码
软件开发 知识产权归属
湖南管理软件开发多少钱
天津ipfs服务器价格
阿里云服务器存储信息安全吗
数据库 储存 html