如何使用Java多线程来实现多人聊天室
发表于:2024-09-23 作者:千家信息网编辑
千家信息网最后更新 2024年09月23日,这篇文章主要为大家展示了"如何使用Java多线程来实现多人聊天室",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"如何使用Java多线程来实现多人聊天室"这篇
千家信息网最后更新 2024年09月23日如何使用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安全错误
数据库的锁怎样保障安全
公安加强网络安全管理的措施
团天下互联网科技有限公司
网络安全十大问题
山东电信服务器托管虚拟主机
厦门软件开发前
南京信息软件开发商家
多线激光雷达ai服务器
网络安全大国博弈
甘肃省三校数据库题库
计算机网络安全毕业论文英文
僵尸毁灭工程服务器公共ip
交换机软件开发怎么样
微信数据库无法恢复
长国网络技术
客户信息数据库的安全
多点湖州网络技术有限公司
海康服务器安装软件
中英网络安全的手机
农发行网络安全保障
数据库对象的管理实验总结
数据库启用远程登录
软件开发需要材料费吗
网络安全200字读后感
西藏工控网络安全
卫生院网络安全演练现场图片
腾讯软件开发面试经验
计算机网络安全毕业论文英文
明日之后怎么把服务器切换
订单销售数据库设计
临沂联想服务器总代理供应商