Java如何实现多人聊天室
发表于:2024-11-22 作者:千家信息网编辑
千家信息网最后更新 2024年11月22日,这篇文章主要讲解了"Java如何实现多人聊天室",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java如何实现多人聊天室"吧!源码工具类:该类用于关闭各
千家信息网最后更新 2024年11月22日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安全错误
数据库的锁怎样保障安全
软件开发基本流程视频
美国容错服务器
管理远程的服务器软件
苹果红包软件开发
vb数据库访问技术不包括
网络安全文明行为促进法
中国网络安全生产法成立于
网络安全主机防护需求
聊天服务器掉线怎么办
天津软件开发推广
信息网络安全中pbr模型
分布式数据库与关系库
时空猎人玩哪个服务器好
傲雪凌霜服务器现在为什么那么卡
网络安全与技术
uni云数据库 添加记录
c erp软件开发
数据库 建表命令
关系数据库中天系对应
网络安全是哪三方面
单位网络安全事件应急预案意见
商洛网络技术服务
广东口碑好的软件开发有哪些
计算机网络技术数据通信基础
linux 数据库管理
江苏交学网络技术有限公司招聘
网络安全员工作枯燥吗
东北软件开发公司有哪些
罪恶都市联机怎么开服务器
离线的数据库系统