Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Java C/S 图形聊天室期末大作业

本项目实现了一个基于 Java 标准库的 C/S 聊天室。服务器端使用 ServerSocket 监听固定端口并在控制台接收命令,客户端使用 Swing 图形界面完成登录、群聊、私聊、匿名切换和在线用户查询。

运行环境

  • JDK 17 或更高版本
  • Windows 命令行或 PowerShell

快速运行

  1. 双击或运行 run_server.bat 启动服务器。
  2. 双击或运行 run_5_clients.bat 一次性打开 5 个客户端,也可以多次运行 run_client.bat。
  3. 使用 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   客户端本地聊天记录写入器

附加实用功能

在完成题目要求之外,本项目增加了两个轻量级实用功能:

  1. 客户端本地聊天记录保存:登录成功后自动保存当前客户端接收到和显示的聊天内容。
  2. 客户端清屏:支持 @@clear 命令和“清屏”按钮,只清空当前客户端窗口,不影响其他用户。

验收演示建议

  1. 启动服务器,说明端口号为 9000,大于题目要求的 8000。
  2. 打开 5 个客户端,分别用 alice、bob、carol、david、emma 登录。
  3. 演示错误密码登录失败,再用正确密码重试成功。
  4. 任意客户端发送普通文本,展示群聊。
  5. 输入 @alice 你好,展示私聊。
  6. 输入 @@anonymous 切换匿名,再发送群聊消息。
  7. 输入 @@showanonymous 查看当前聊天方式。
  8. 输入 @@list 或点击“在线用户”,展示在线用户。
  9. 输入 @@clear 或点击“清屏”,展示客户端本地清屏功能。
  10. 在服务器控制台输入 list 和 listall。
  11. 客户端退出后打开 logs/server.log,展示服务器日志记录。
  12. 打开 chat_history 目录,展示客户端本地聊天记录文件。

提交前需要你自己改的地方

将最终文档、压缩包、邮件标题改成学校要求的格式:

班级+学号+姓名

如果老师严格要求“所有源代码放到一个名字为学号的目录下”,请把 src 目录复制到一个以你真实学号命名的目录下,或者使用我整理好的提交包模板后再改名。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages