如何使用Java多线程来实现多人聊天室
发表于:2025-11-12 作者:千家信息网编辑
千家信息网最后更新 2025年11月12日,这篇文章主要为大家展示了"如何使用Java多线程来实现多人聊天室",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"如何使用Java多线程来实现多人聊天室"这篇
千家信息网最后更新 2025年11月12日如何使用Java多线程来实现多人聊天室
这篇文章主要为大家展示了"如何使用Java多线程来实现多人聊天室",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"如何使用Java多线程来实现多人聊天室"这篇文章吧。
客户端代码:
package netProgram;import java.io.IOException;import java.net.Socket;import java.net.SocketAddress;public class Client implements ScreenInputInterface{ private SocketHandler socketHandler; public void start(){ new Thread(new ScreenInputRunIns(this)).start(); try { socketHandler = new SocketHandler(new Socket("127.0.0.1",666),null); new Thread(socketHandler).start(); } catch (IOException e) { e.printStackTrace(); } } @Override public void send(String msg) { socketHandler.sendMsg(msg); } /* @Override public void send(String msg, SocketAddress address) { socketHandler.sendMsg(msg); }*/}服务端代码:
package netProgram;import java.io.IOException;import java.net.ServerSocket;import java.net.SocketAddress;import java.util.ArrayList;import java.util.List;public class Server implements ScreenInputInterface{ private List clients = new ArrayList<>(); private ServerSocket serverSocket; public void start(){// new Thread(new ScreenInputRunIns(this)).start(); try { serverSocket = new ServerSocket(666); while (true){ SocketHandler socketHandler = new SocketHandler(serverSocket.accept(),this); clients.add(socketHandler); System.out.println(socketHandler.getSocket().getRemoteSocketAddress()+"进入聊天系统"); new Thread(socketHandler).start(); } } catch (IOException e) { e.printStackTrace(); } } @Override public void send(String msg) { for (SocketHandler s:clients) { s.sendMsg(msg); } } /* @Override public void send(String msg, SocketAddress address) { for (SocketHandler s:clients) { if (s.getSocket().getRemoteSocketAddress().equals(address)){ continue; } s.sendMsg(msg); } }*/ public static void main(String[] args) { new Server().start(); }} 屏幕输入信息接口:
package netProgram;import java.net.SocketAddress;public interface ScreenInputInterface { void send(String msg);// void send(String msg, SocketAddress address);}用于各个端口输入信息的创建的线程对象:
package netProgram;import java.util.Scanner;public class ScreenInputRunIns implements Runnable{ private ScreenInputInterface screenInputInterface; private Scanner input = new Scanner(System.in); public ScreenInputRunIns(ScreenInputInterface screenInputInterface) { this.screenInputInterface = screenInputInterface; } @Override public void run() {//屏幕实时输入 while (true){ String msg = input.nextLine();// screenInputInterface.send(msg,null); screenInputInterface.send(msg); } }}套接字处理器(用于传输数据:实际发送信息到输出流并实时监听各个端口的输入且负责显示):
package netProgram;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Socket;public class SocketHandler implements Runnable{ private String clientName; private Socket socket; private PrintWriter writer; private Server server; public SocketHandler(Socket socket,Server server) throws IOException { this.socket = socket; this.server = server; clientName = "<"+socket.getLocalSocketAddress()+">"; writer = new PrintWriter(this.socket.getOutputStream()); } public Socket getSocket() { return socket; } public void sendMsg(String msg){ if (server!=null) writer.println(msg); else writer.println(clientName+":"+msg); writer.flush(); } @Override public void run() { while(true){//监听输入流的输入 try { BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); String receiveMsg = null; System.out.println(); if ((receiveMsg = reader.readLine())!=null&&!(receiveMsg.equals(""))){ if (server!=null){// server.send(receiveMsg,socket.getRemoteSocketAddress()); server.send(receiveMsg); }else { System.out.println(receiveMsg); } } } catch (IOException e) { e.printStackTrace(); } } }}负责启动的各个端口的客户端代码:
package netProgram;public class ClientLinked { public static void main(String[] args) { new Client().start(); }}package netProgram;public class ClientLinked1 { public static void main(String[] args) { new Client().start(); }}package netProgram;public class ClientLinked2 { public static void main(String[] args) { new Client().start(); }}服务端启动代码在服务端类的main方法中。
以上是"如何使用Java多线程来实现多人聊天室"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
输入
线程
代码
多人
聊天室
信息
内容
端口
篇文章
服务
实时
客户
客户端
屏幕
学习
帮助
监听
处理器
套接字
实际
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
计算机网络技术在线考试
服务器上的视频是否能保存
招聘软件开发程序员
列举一下优化数据库的方法
网络安全奖学金获奖提名人数
魔域单机版服务器失败
汽车软件开发和互联网区内
软件开发是用什么软件开发
网络安全画报很简单
网络安全的经典故事
精锐纵横网络技术
导出数据库表名到excel
vps 建代理服务器
美国互联网中国科技
安全接入区采集服务器作用
服务器配置管理路由
网络安全进入社区活动
什么属于软件开发服务
网络安全人才培养硕果
软件开发违反保密义务
公安局召开网络安全监督检查会议
安卓客户端与服务器通信
服务器程序正常但没有启动
网络安全的主要种类
2012打印机服务器设置教程
曲速软件开发
程序员转软件开发
锐讯网络技术团队
华为无线部门网关软件开发
sql中如何插入学生课程数据库