|
@@ -0,0 +1,184 @@
|
|
|
|
|
+# Chat-GWNG 网络聊天室
|
|
|
|
|
+
|
|
|
|
|
+一个基于Java NIO和JavaFX的现代化网络聊天室应用,支持实时消息传递和用户管理。
|
|
|
|
|
+
|
|
|
|
|
+## 项目简介
|
|
|
|
|
+
|
|
|
|
|
+Chat-GWNG 是广东外语外贸大学南国商学院的网络聊天室项目,采用Java NIO非阻塞IO模型实现高性能的网络通信,使用JavaFX构建用户界面。
|
|
|
|
|
+
|
|
|
|
|
+## 功能特性
|
|
|
|
|
+
|
|
|
|
|
+- ✅ 实时消息传递(TCP协议)
|
|
|
|
|
+- ✅ 用户登录/登出管理
|
|
|
|
|
+- ✅ 群组聊天功能
|
|
|
|
|
+- ✅ 私聊消息支持
|
|
|
|
|
+- ✅ 在线用户列表显示(UDP协议)
|
|
|
|
|
+- ✅ 系统消息广播
|
|
|
|
|
+- ✅ 消息撤回功能
|
|
|
|
|
+- ✅ 图形化用户界面
|
|
|
|
|
+
|
|
|
|
|
+## 技术栈
|
|
|
|
|
+
|
|
|
|
|
+### 后端技术
|
|
|
|
|
+- **Java 17** - 主要编程语言
|
|
|
|
|
+- **Java NIO** - 非阻塞IO网络通信
|
|
|
|
|
+- **Maven** - 项目构建和依赖管理
|
|
|
|
|
+- **Lombok** - 简化Java代码
|
|
|
|
|
+
|
|
|
|
|
+### 前端技术
|
|
|
|
|
+- **JavaFX 21** - 现代化桌面UI框架
|
|
|
|
|
+- **FXML** - JavaFX界面描述语言
|
|
|
|
|
+
|
|
|
|
|
+### 网络协议
|
|
|
|
|
+- **TCP** - 主要消息传输协议
|
|
|
|
|
+- **UDP** - 在线用户列表推送
|
|
|
|
|
+
|
|
|
|
|
+## 项目结构
|
|
|
|
|
+
|
|
|
|
|
+```
|
|
|
|
|
+chat-gwng/
|
|
|
|
|
+├── chat-server/ # 服务器端模块
|
|
|
|
|
+│ ├── src/main/java/
|
|
|
|
|
+│ │ └── space/anyi/chatServer/
|
|
|
|
|
+│ │ ├── Main.java # 主启动类
|
|
|
|
|
+│ │ ├── Server.java # 服务器启动类
|
|
|
|
|
+│ │ ├── core/
|
|
|
|
|
+│ │ │ ├── ChatServer.java # 聊天服务器核心类
|
|
|
|
|
+│ │ │ ├── ReadHandler.java # 读事件处理器
|
|
|
|
|
+│ │ │ └── WriteHandler.java # 写事件处理器
|
|
|
|
|
+│ │ └── ui/ # 用户界面相关
|
|
|
|
|
+│ └── src/main/resources/fxml/ # FXML界面文件
|
|
|
|
|
+├── chat-client/ # 客户端模块
|
|
|
|
|
+│ ├── src/main/java/
|
|
|
|
|
+│ │ └── space/anyi/chatClient/
|
|
|
|
|
+│ │ ├── Client.java # 客户端启动类
|
|
|
|
|
+│ │ ├── core/
|
|
|
|
|
+│ │ │ ├── Client.java # 客户端核心类
|
|
|
|
|
+│ │ │ ├── ReadHandler.java # 读事件处理器
|
|
|
|
|
+│ │ │ └── WriterHandler.java # 写事件处理器
|
|
|
|
|
+│ │ └── ui/ # 用户界面相关
|
|
|
|
|
+│ └── src/main/resources/fxml/ # FXML界面文件
|
|
|
|
|
+├── chat-commom/ # 公共模块
|
|
|
|
|
+│ └── src/main/java/
|
|
|
|
|
+│ └── space/anyi/chatCommom/
|
|
|
|
|
+│ ├── Message.java # 消息实体类
|
|
|
|
|
+│ └── Encoder.java # 消息编码器
|
|
|
|
|
+└── pom.xml # Maven父项目配置
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+## 快速开始
|
|
|
|
|
+
|
|
|
|
|
+### 环境要求
|
|
|
|
|
+
|
|
|
|
|
+- **JDK 17+** - Java开发环境
|
|
|
|
|
+- **Maven 3.6+** - 项目构建工具
|
|
|
|
|
+- **JavaFX 21** - 图形界面框架
|
|
|
|
|
+
|
|
|
|
|
+### 安装步骤
|
|
|
|
|
+
|
|
|
|
|
+1. **构建项目**
|
|
|
|
|
+```bash
|
|
|
|
|
+mvn clean compile
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+2. **启动服务器**
|
|
|
|
|
+```bash
|
|
|
|
|
+# 方式一:命令行模式
|
|
|
|
|
+mvn exec:java -pl chat-server -Dexec.mainClass="space.anyi.chatServer.Server"
|
|
|
|
|
+
|
|
|
|
|
+# 方式二:JavaFX界面模式
|
|
|
|
|
+mvn exec:java -pl chat-server -Dexec.mainClass="space.anyi.chatServer.ui.ServerApplication"
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+3. **启动客户端**
|
|
|
|
|
+```bash
|
|
|
|
|
+# 方式一:命令行模式
|
|
|
|
|
+mvn exec:java -pl chat-client -Dexec.mainClass="space.anyi.chatClient.Client"
|
|
|
|
|
+
|
|
|
|
|
+# 方式二:JavaFX界面模式
|
|
|
|
|
+mvn exec:java -pl chat-client -Dexec.mainClass="space.anyi.chatClient.ui.ClientApplication"
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 默认配置
|
|
|
|
|
+
|
|
|
|
|
+- **服务器端口**: 8000
|
|
|
|
|
+- **服务器地址**: localhost
|
|
|
|
|
+- **UDP推送端口**: 8080
|
|
|
|
|
+
|
|
|
|
|
+## 核心功能说明
|
|
|
|
|
+
|
|
|
|
|
+### 消息类型系统
|
|
|
|
|
+
|
|
|
|
|
+项目定义了完整的消息类型系统:
|
|
|
|
|
+
|
|
|
|
|
+```java
|
|
|
|
|
+// 消息类型
|
|
|
|
|
+Message.MessageType.SYSTEM // 系统消息
|
|
|
|
|
+Message.MessageType.USER // 用户消息
|
|
|
|
|
+
|
|
|
|
|
+// 操作类型
|
|
|
|
|
+Message.OperateType.CHAT // 聊天
|
|
|
|
|
+Message.OperateType.LOGIN // 登录
|
|
|
|
|
+Message.OperateType.LOGOUT // 登出
|
|
|
|
|
+Message.OperateType.BROADCAST // 广播
|
|
|
|
|
+Message.OperateType.UDP // UDP地址推送
|
|
|
|
|
+Message.OperateType.REVOKE // 消息撤回
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 网络通信架构
|
|
|
|
|
+
|
|
|
|
|
+1. **TCP连接**:用于主要的消息传输
|
|
|
|
|
+2. **UDP推送**:用于实时更新在线用户列表
|
|
|
|
|
+3. **Selector机制**:非阻塞IO事件处理
|
|
|
|
|
+4. **Channel管理**:连接通道的生命周期管理
|
|
|
|
|
+
|
|
|
|
|
+## 开发指南
|
|
|
|
|
+
|
|
|
|
|
+### 代码规范
|
|
|
|
|
+
|
|
|
|
|
+- 使用Lombok简化Getter/Setter代码
|
|
|
|
|
+- 遵循Java命名规范
|
|
|
|
|
+- 使用Maven标准目录结构
|
|
|
|
|
+- 添加完整的JavaDoc注释
|
|
|
|
|
+
|
|
|
|
|
+### 运行调试
|
|
|
|
|
+
|
|
|
|
|
+1. **调试服务器**:
|
|
|
|
|
+```bash
|
|
|
|
|
+mvn exec:java -pl chat-server -Dexec.mainClass="space.anyi.chatServer.Server"
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+2. **调试客户端**:
|
|
|
|
|
+```bash
|
|
|
|
|
+mvn exec:java -pl chat-client -Dexec.mainClass="space.anyi.chatClient.Client"
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 打包部署
|
|
|
|
|
+
|
|
|
|
|
+```bash
|
|
|
|
|
+# 打包所有模块
|
|
|
|
|
+mvn clean package
|
|
|
|
|
+
|
|
|
|
|
+# 运行打包后的JAR
|
|
|
|
|
+java -jar chat-server/target/chat-server-1.0-SNAPSHOT.jar
|
|
|
|
|
+java -jar chat-client/target/chat-client-1.0-SNAPSHOT.jar
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+## 许可证
|
|
|
|
|
+
|
|
|
|
|
+本项目采用 MIT 许可证。
|
|
|
|
|
+
|
|
|
|
|
+## 联系方式
|
|
|
|
|
+
|
|
|
|
|
+- **开发者**: 杨逸
|
|
|
|
|
+- **学校**: 广东外语外贸大学南国商学院
|
|
|
|
|
+- **项目时间**: 2025年
|
|
|
|
|
+
|
|
|
|
|
+## 更新日志
|
|
|
|
|
+
|
|
|
|
|
+### v1.0-SNAPSHOT (2025-09)
|
|
|
|
|
+- 初始版本发布
|
|
|
|
|
+- 基于Java NIO的网络通信
|
|
|
|
|
+- JavaFX图形界面
|
|
|
|
|
+- 完整的聊天功能
|
|
|
|
|
+- 用户管理功能
|