本项目实现了一个基于 Java 标准库的 C/S 聊天室。服务器端使用 ServerSocket 监听固定端口并在控制台接收命令,客户端使用 Swing 图形界面完成登录、群聊、私聊、匿名切换和在线用户查询。
- JDK 17 或更高版本
- Windows 命令行或 PowerShell
- 双击或运行
run_server.bat启动服务器。 - 双击或运行
run_5_clients.bat一次性打开 5 个客户端,也可以多次运行run_client.bat。 - 使用
users.txt中的账号登录,例如:- 用户名:
alice - 密码:
123456
- 用户名:
- 普通文本:群聊消息,所有在线用户可见。
@用户名 消息:私聊消息,只有被 @ 的在线用户可见。@@list:查看当前在线用户。@@quit:退出客户端。@@showanonymous:查看当前是否匿名聊天。@@anonymous:在匿名聊天和实名聊天之间切换。@@clear:清空当前客户端聊天窗口。
输入框支持按回车发送。客户端界面中也提供了“在线用户”“切换匿名”“清屏”“退出”按钮。
服务器启动后会显示 server> 提示符,可输入:
list:列出全部在线用户。listall:列出用户文件中的全部用户。quit:退出服务器。
服务器会自动写入 logs/server.log,记录:
- 登录成功,包含用户名、IP、时间。
- 登录失败,包含用户名、IP、时间和失败原因。
- 用户退出聊天室,包含用户名、IP、时间。
客户端登录成功后会自动创建 chat_history 目录,并把当前客户端看到的聊天内容保存为:
chat_history/用户名_时间.txt
该功能用于本地回看聊天记录,不影响服务器转发逻辑。
src/chat/common
ChatInput.java 客户端输入解析结果
ChatParser.java 解析普通消息、私聊消息和系统命令
NetworkMessage.java 网络协议消息对象
Protocol.java 客户端和服务器共用的编码/解码协议
src/chat/server
ChatServer.java 服务器主程序,负责监听端口、接收连接、转发消息和处理服务器命令
UserStore.java 读取用户文件并完成用户名密码验证
ServerLogger.java 记录登录成功、登录失败和退出日志
src/chat/client
ChatClient.java Swing 图形客户端,负责登录界面、聊天界面和用户输入处理
ChatHistoryWriter.java 客户端本地聊天记录写入器
在完成题目要求之外,本项目增加了两个轻量级实用功能:
- 客户端本地聊天记录保存:登录成功后自动保存当前客户端接收到和显示的聊天内容。
- 客户端清屏:支持
@@clear命令和“清屏”按钮,只清空当前客户端窗口,不影响其他用户。
- 启动服务器,说明端口号为
9000,大于题目要求的8000。 - 打开 5 个客户端,分别用
alice、bob、carol、david、emma登录。 - 演示错误密码登录失败,再用正确密码重试成功。
- 任意客户端发送普通文本,展示群聊。
- 输入
@alice 你好,展示私聊。 - 输入
@@anonymous切换匿名,再发送群聊消息。 - 输入
@@showanonymous查看当前聊天方式。 - 输入
@@list或点击“在线用户”,展示在线用户。 - 输入
@@clear或点击“清屏”,展示客户端本地清屏功能。 - 在服务器控制台输入
list和listall。 - 客户端退出后打开
logs/server.log,展示服务器日志记录。 - 打开
chat_history目录,展示客户端本地聊天记录文件。
将最终文档、压缩包、邮件标题改成学校要求的格式:
班级+学号+姓名
如果老师严格要求“所有源代码放到一个名字为学号的目录下”,请把 src 目录复制到一个以你真实学号命名的目录下,或者使用我整理好的提交包模板后再改名。