如何使用Java多线程来实现多人聊天室
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要为大家展示了"如何使用Java多线程来实现多人聊天室",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"如何使用Java多线程来实现多人聊天室"这篇
千家信息网最后更新 2026年11月03日如何使用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安全错误
数据库的锁怎样保障安全
互联网科技图片
中关村互联网科技集团
重生之互联网科技帝国
互联网电商科技
苏州互联网科技贷款公司
郑州华宇互联网科技
中盈科技互联网信息有限公司
温州喔噻互联网科技有限公司
成都铂石互联网科技做什么的
昊天互联网科技有限公司
崇明区互联网教育科技诚信经营
互联网科技和信息
互联网科技公司营业执照怎么办理
烟台灵鸽互联网科技有限公司
互联网营销推广黑科技
济南小医互联网科技有限公司招聘
广州三三互联网科技有限公司
互联网科技对化妆品行业
银川新华互联网科技学校招聘
科技美学互联网 艺术
平安科技 互联网
上游互联网科技
北京三清互联网科技
阿里巴巴算科技企业还是互联网
威龙国际互联网科技公司
每天都有哪些好的互联网科技
互联网企业科技类企业如何做账
北京市互联网新科技
国产互联网科技公司
科技信息时代互联网发展