Java Socket+多线程 实现简易聊天室(注释版)

本文介绍了一个使用Java Socket和多线程技术实现的简易聊天室。客户端可以自定义昵称,并在登录时显示在线成员。当消息发送时,所有在线客户端都能接收到。文章还指出了原参考代码的异常问题,并提供了解决方案。遗留问题包括昵称设定时机、服务器断开后的处理及聊天记录格式等。

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

代码基础参考链接,十分感谢。


需求功能:

  1. 实现客户端与服务器的连接
  2. 各个客户端能够共享消息界面,即一个客户端发送消息后所有在线客户端都能够收到
  3. 客户端登录时可以自定义昵称
  4. 客户端登录后显示已在线成员
  5. 客户端登录后通知其他在线成员,下线后也通知
  6. 客户端登录后显示之前的聊天记录
  7. 服务器断开后能通知各客户端重启
  8. 启动客户端时若服务器未打开显示提示信息
  9. 客户端退出后服务器能够提示,登录同

 

核心思想:

将服务器作为转接的中间站,用集合存储链接的socket、记录和在线成员。

 

原参考代码会出现的主要问题:

任意关闭一个客户端或关闭服务器时会抛出 java.net.SocketException: Connection reset 的异常,原因是:一端退出,但退出时并未关闭该连接,另一端如果在从连接中读数据则抛出该异常。因此此处的解决方法为在ServerThreadbuf读取数据时加个try-catch块,有异常后进行相应的处理。

 

运行截图:

 

代码部分:

Server.java  服务器

package ChatRoomDemo;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;

public class Server {

    public static List<Socket> list = new ArrayList<>();            // 客户端连接
    public static List<String> record = new ArrayList<>();          // 聊天记录
    public static List<String> online_member = new ArrayList<>();   // 在线成员
    private static ServerSocket server;

    public static void main(String[] args) {
        try {
            server = new ServerSo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值