一个基于 Java Swing 和 Socket 的本地局域网聊天应用。
本项目是一个 C/S 架构的即时通讯软件,支持用户注册、登录、群组聊天、群组管理等功能。 项目采用 Java 语言开发,使用 Swing 作为 GUI 框架,底层通过 TCP Socket 进行全双工通信。
项目主要分为三个核心包:client(客户端)、server(服务端)和 global/util(公共组件)。
-
客户端 (Client)
- 入口文件:
src/client/Client.java - 业务逻辑:
src/client/service/ChatReceiver.java: 负责接收服务端消息,驱动 UI 更新ChatSender.java: 负责发送消息给服务端LocalData.java: 客户端本地数据缓存
- 界面展示:
src/client/view/LoginPage.java: 登录/注册主容器MainPage.java: 聊天主界面容器login/: 登录与注册的具体视图组件main/: 聊天窗口、群组列表等具体视图组件
- 入口文件:
-
服务端 (Server)
- 入口文件:
src/server/Server.java - 业务服务:
src/server/serveice/ClientChatThread.java: 处理单个客户端的连接线程Wrapper.java: 通信协议数据包定义
- 数据模型:
src/server/data/
- 入口文件:
-
公共组件
- 全局常量:
src/global/global.java - 工具类:
src/util/MsgUtil.java: 消息处理工具SocketUtil.java: Socket 相关工具FileUtil.java: 文件操作工具
- 全局常量:
- 用户系统
- 登录与注册:支持新用户注册和账号登录验证
- 个人信息维护:支持修改头像、签名、生日等个人信息
- 即时通讯
- 群组聊天:支持创建群组、加入群组、群内实时消息广播
- 私聊功能:支持好友间点对点私聊,消息实时推送
- 混合消息列表:统一展示群聊和私聊会话,直观管理所有聊天
- 好友与关系链
- 好友管理:支持查找用户、发送好友请求、同意/拒绝好友申请
- 状态同步:实时感知好友在线/离线状态
- 数据持久化
- 服务端自动保存群组信息、用户信息及聊天记录
- 客户端本地缓存最近的聊天数据和用户配置
注:以下功能为项目进阶特性,已在当前版本中完全实现。
- 好友系统深度集成:不仅支持基础的增删好友,还实现了好友状态的实时同步和私聊消息的独立存储。
- 动态 UI 交互:
- 登录/注册面板平滑切换
- 消息列表根据消息类型(群聊/私聊)自动展示不同图标和状态
- 聊天窗口自适应调整,支持显示历史消息记录
本项目存在动态替换 UI 组件的设计模式。例如在登录界面,当用户点击“注册”按钮时,登录面板(SignIn)会被替换为注册面板(SignUp)。
-
登录页面 (
LoginPage)- 包含
SignInView: 登录表单组件 - 包含
SignUpView: 注册表单组件 - 替换逻辑: 通过
CardLayout或移除/添加组件的方式实现面板切换。
- 包含
-
主界面 (
MainPage)- 左侧导航 (
SideOptionView): 功能菜单与群组列表 - 中间内容 (
ContentView): 聊天窗口与消息展示 - 二级选项 (
SecondaryOptionView): 辅助功能入口。(更新:顶部标题栏添加了明显的上下分割线,增强了与聊天列表及窗口标题的视觉层次感)
- 左侧导航 (
-
UI 工具包 (
util)- 包含自定义 UI 元素(如
BlueOutlineWhiteBtn、CircleCharIcon2) DesignToken: 统一定义颜色、字体等设计规范,确保 UI 风格一致性。
- 包含自定义 UI 元素(如
本项目支持生成包含客户端和服务端的独立安装包。
-
编译打包: 使用 Maven 进行编译,
pom.xml已配置maven-resources-plugin自动复制依赖到target/lib。mvn clean package
-
生成客户端和服务端映像: 使用
jpackage生成包含 JRE 的独立可执行程序。-
生成客户端:
jpackage --type app-image --input target --main-jar LocalChatRoom-1.0-SNAPSHOT.jar --main-class client.Client --dest dist --name LocalChatClient --java-options "-Dfile.encoding=UTF-8" -
生成服务端:
jpackage --type app-image --input target --main-jar LocalChatRoom-1.0-SNAPSHOT.jar --main-class server.Server --dest dist --name LocalChatServer --java-options "-Dfile.encoding=UTF-8"
-
-
生成安装包: 使用 Inno Setup 编译
dist/setup.iss脚本,最终生成dist/Output/LocalChatApp_Setup.exe。 安装包将同时包含客户端和服务端程序。
- JDK: Java 11 (推荐) / Java 8
- Build Tool: Maven
- UI Framework: Java Swing / JavaFX
- Dependencies: 项目已内置所需依赖库(位于
lib/目录),无需额外配置 Maven 仓库即可构建。
-
启动服务端 运行
src/server/Server.java中的main方法。 -
启动客户端 运行
src/client/Client.java中的main方法。 注意:请确保服务端已启动,否则客户端无法连接。
- Fork 本仓库
- 新建
feature/xxx分支 - 提交代码
- 新建 Pull Request