一个简单的java聊天室

2024-06-05 20:58
文章标签 java 简单 聊天室

本文主要是介绍一个简单的java聊天室,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 利用java Socket编写的群聊室,可以自己拷过去试试


Server端:

package net3;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
import java.util.ArrayList;
import java.util.List;public class Server {private List<ServerThread> clients = null;public static void main(String[] args) {new Server().startUp();}private void startUp() {ServerSocket ss = null;Socket s = null;try {ss = new ServerSocket(5858);clients = new ArrayList<ServerThread>();while (true) {s = ss.accept();ServerThread st = new ServerThread(s);new Thread(st).start();}} catch (IOException e) {e.printStackTrace();} finally {try {if (ss != null) ss.close();} catch (IOException e) {e.printStackTrace();}}}private class ServerThread implements Runnable {private Socket s = null;private BufferedReader br;private PrintWriter out;private String name;private boolean flag = true;public ServerThread(Socket socket) throws IOException {this.s = socket;br = new BufferedReader(new InputStreamReader(socket.getInputStream()));out = new PrintWriter(socket.getOutputStream(), true);String str = br.readLine();name = str+"["+socket.getInetAddress().getHostAddress()+":"+socket.getPort()+"]";clients.add(this);send(name+"上线了");}private void send(String msg) {for (ServerThread st : clients)st.out.println(msg);}private void receive() throws IOException {String str = null;while ((str=br.readLine()) != null) {if (str.equalsIgnoreCase("quit")) {stop();out.println("disconnect");break;}send(name+":"+str);}}private void stop() {clients.remove(this);flag = false;send(name+"已经下线了");}@Overridepublic void run() {try {while (true) {if (!flag) break;receive();}} catch (SocketException e) {stop();} catch (IOException e) {e.printStackTrace();} finally {try {if (s != null) s.close();} catch (IOException e) {e.printStackTrace();}}}}
}


Client端

package net3;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;public class Client {private Socket s;private BufferedReader br; private PrintWriter out;private boolean flag = true;public static void main(String[] args) {new Client().stratUp();}private void stratUp() {BufferedReader sbr = null;try {s = new Socket("127.0.0.1", 5858);out = new PrintWriter(s.getOutputStream(), true);br = new BufferedReader(new InputStreamReader(s.getInputStream()));out.println("老林");
//			out.println("老周");sbr = new BufferedReader(new InputStreamReader(System.in));new Thread(new ClientThread()).start();String str = null;while (flag && (str=sbr.readLine())!=null) {if (!flag) break;out.println(str);}} catch (UnknownHostException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {try {if (s != null) s.close();} catch (IOException e) {e.printStackTrace();}try {if (sbr != null) s.close();} catch (IOException e) {e.printStackTrace();}}}private void receive() {try {String rs = br.readLine();if (rs.equalsIgnoreCase("disconnect")) {flag = false;System.out.println("点击回车退出");}System.out.println(rs);} catch (IOException e) {e.printStackTrace();}}private class ClientThread implements Runnable {@Overridepublic void run() {while (true) {if (!flag) break;receive();}}}}


这篇关于一个简单的java聊天室的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1034162

相关文章

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

Spring Cloud LoadBalancer 负载均衡详解

《SpringCloudLoadBalancer负载均衡详解》本文介绍了如何在SpringCloud中使用SpringCloudLoadBalancer实现客户端负载均衡,并详细讲解了轮询策略和... 目录1. 在 idea 上运行多个服务2. 问题引入3. 负载均衡4. Spring Cloud Load

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

在 Spring Boot 中使用 @Autowired和 @Bean注解的示例详解

《在SpringBoot中使用@Autowired和@Bean注解的示例详解》本文通过一个示例演示了如何在SpringBoot中使用@Autowired和@Bean注解进行依赖注入和Bean... 目录在 Spring Boot 中使用 @Autowired 和 @Bean 注解示例背景1. 定义 Stud

如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解

《如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解》:本文主要介绍如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别的相关资料,描述了如何使用海康威视设备网络SD... 目录前言开发流程问题和解决方案dll库加载不到的问题老旧版本sdk不兼容的问题关键实现流程总结前言作为

redis群集简单部署过程

《redis群集简单部署过程》文章介绍了Redis,一个高性能的键值存储系统,其支持多种数据结构和命令,它还讨论了Redis的服务器端架构、数据存储和获取、协议和命令、高可用性方案、缓存机制以及监控和... 目录Redis介绍1. 基本概念2. 服务器端3. 存储和获取数据4. 协议和命令5. 高可用性6.

SpringBoot中使用 ThreadLocal 进行多线程上下文管理及注意事项小结

《SpringBoot中使用ThreadLocal进行多线程上下文管理及注意事项小结》本文详细介绍了ThreadLocal的原理、使用场景和示例代码,并在SpringBoot中使用ThreadLo... 目录前言技术积累1.什么是 ThreadLocal2. ThreadLocal 的原理2.1 线程隔离2

springboot将lib和jar分离的操作方法

《springboot将lib和jar分离的操作方法》本文介绍了如何通过优化pom.xml配置来减小SpringBoot项目的jar包大小,主要通过使用spring-boot-maven-plugin... 遇到一个问题,就是每次maven package或者maven install后target中的ja

Java中八大包装类举例详解(通俗易懂)

《Java中八大包装类举例详解(通俗易懂)》:本文主要介绍Java中的包装类,包括它们的作用、特点、用途以及如何进行装箱和拆箱,包装类还提供了许多实用方法,如转换、获取基本类型值、比较和类型检测,... 目录一、包装类(Wrapper Class)1、简要介绍2、包装类特点3、包装类用途二、装箱和拆箱1、装

如何利用Java获取当天的开始和结束时间

《如何利用Java获取当天的开始和结束时间》:本文主要介绍如何使用Java8的LocalDate和LocalDateTime类获取指定日期的开始和结束时间,展示了如何通过这些类进行日期和时间的处... 目录前言1. Java日期时间API概述2. 获取当天的开始和结束时间代码解析运行结果3. 总结前言在J