Java如何实现多人聊天室
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,这篇文章主要讲解了"Java如何实现多人聊天室",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java如何实现多人聊天室"吧!源码工具类:该类用于关闭各
千家信息网最后更新 2025年01月20日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安全错误
数据库的锁怎样保障安全
辽宁什么软件开发服务值得推荐
开源件管理服务器软件
梦幻手游没有服务器
河北鼎道网络技术有限公司
深圳市天鹰软件开发座机号码
中学生网络安全教育讲座
电脑端的软件开发
海南金财网络技术有限公司电话
统计数据库查询耗时
软件开发对数学知识理论应用
网络安全测量
营业厅项目数据库
数据库检索途径
防止服务器崩掉的东西
数据库服务器管理员
网络安全相关专业毕业生人数
软件开发初步设计阶段
网络安全技术人员水平
外卖预订系统数据库
数据库中 是什么关系
违反网络安全法第五十六条
国内网络安全类公司
在京东做数据库
oracle数据库 采购
密码法与网络安全
预防网络安全的策略和技术
京东物流数据库技术
软件开发能不能开普票
数据库原理课后答案苗雪兰
vs2017做数据库