Java实现ChatRoom

本博客介绍了一个基于Socket和多线程技术的Java聊天室系统,实现了登录注册、群聊、私聊等功能,并展示了如何通过多线程处理客户端的连接与消息发送。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基于连接通信Socket、多线程的Java聊天室

1、开发环境:

IDEA2018.1+JDK1.8

2、实现功能:

实现了模拟登录注册、群聊、私聊、显示当前在线人数列表;

在发送信息时,会向对方发送者及显示发送时间;

显示在线人数列表时,也会显示查询时间;

实现了多线程发送消息、接收消息过程。

3、代码解析(源码可见本篇博客最后):

1)客户端源码解析

客户端使用两个线程操作

一个读线程:创建客户端输入流,while循环将读到的信息输出道控制台,模拟一直等待监听输入的情况;

一个写线程:创建客户端输出流,while循环获取用户从控制台输入的内容,若用户输入的信息中包含"bye",则关闭流并且关闭该用户的Socket,此时退出while循环,写线程结束;此时读线程的if条件判断就会执行break;while循环停止,读线程结束。

2)服务器源码解析

利用Executors类创建固定大小为20的线程池(实现多线程);

使用Map集合来存储用户信息,<String, Socket>:用户名,客户端的socket;Map集合使用子类ConcurrentHashMap来实例化,保证线程安全(主要可见Java集合总结);

使用内部类来处理客户端的连接与发送信息;

根据控制台约束信息进行用户注册、私发、群聊等等功能的实现

3)两台计算机之间使用套接字建立TCP连接过程

服务器实例化一个ServerSocket对象,new ServerSocket(6666):表示是通过服务器上的6666端口进行通信;

服务器调用ServerSocket类的accept(),该方法阻塞式等待客户端的连接;

客户端实例化一个Socket对象,new Socket("127.0.0.1", 6666):指定服务器名称和端口号来请求连接,该构造方法试图将客户端连接到指定的服务器和端口号,如果通信建立,则会在客户端创建Socket对象能够与服务器进行通信;

在服务端,accept()方法返回客户端的socket对象。

4、结果展示:

开启了三个客户端

测试:   用户上线功能、显示当前用户列表功能、私聊功能、用户下线功能

客户端3

测试:   用户上线功能、显示当前用户列表功能、群聊功能

客户端2

测试:   用户上线功能、显示当前用户列表功能、群发功能、私聊功能

客户端1

服务端:体现出了用户上线及用户下线的情况

服务端

客户端源代码:

//读线程
class ReadThread implements Runnable{
    private Socket client;

    public ReadThread(Socket client) {
        this.client = client;
    }
    @Override
    public void run() {
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值