# T-CHAT去中心化CLI聊天工具 **Repository Path**: tank2017/t-chat ## Basic Information - **Project Name**: T-CHAT去中心化CLI聊天工具 - **Description**: TChat 是一个完全去中心化协议的去中心化命令行聊天工具,使用 Go 语言开发。它利用 P2P 覆盖网络路由协议来实现去中心化的消息通信,支持多种消息类型、文件传输、蓝牙连接等功能。 - **Primary Language**: Unknown - **License**: BSD-3-Clause - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-07-11 - **Last Updated**: 2025-10-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # TChat - 去中心化CLI聊天应用
[![Go Version](https://img.shields.io/badge/Go-1.21+-00ADD8?style=for-the-badge&logo=go)](https://golang.org/) [![License](https://img.shields.io/badge/License-MIT-blue?style=for-the-badge)](LICENSE) [![Platform](https://img.shields.io/badge/Platform-Windows%20%7C%20Linux%20%7C%20macOS-lightgrey?style=for-the-badge)]() **一个基于Pinecone协议的完全去中心化CLI聊天应用** [功能特性](#功能特性) • [快速开始](#快速开始) • [使用指南](#使用指南) • [架构设计](#架构设计) • [开发文档](#开发文档)
--- ## 📖 项目简介 TChat是一个基于Go语言开发的去中心化命令行聊天应用,采用Pinecone协议实现点对点通信。无需中央服务器,支持端到端加密,提供安全、高效、可靠的分布式聊天体验。 ### 🎯 设计理念 - **去中心化优先** - 完全基于P2P网络,无单点故障 - **安全至上** - 端到端加密,保护用户隐私 - **简洁高效** - CLI界面,专注核心功能 - **跨平台兼容** - 支持主流操作系统 ## ✨ 功能特性 ### 🌐 网络通信 - **去中心化网络** - 基于Pinecone协议的P2P网络通信 - **自动发现** - mDNS自动发现局域网内的节点 - **多传输支持** - TCP、QUIC、蓝牙等多种传输方式 - **网络自愈** - 自动路由发现和网络拓扑恢复 ### 🔒 安全机制 - **端到端加密** - Ed25519公钥加密和AES-GCM对称加密 - **身份验证** - 基于公钥的安全身份验证 - **防重放攻击** - 消息序号和时间戳验证 - **密钥管理** - 安全的密钥生成、存储和交换 ### 💬 聊天功能 - **实时消息** - 支持文本消息、表情符号的实时传输 - **聊天历史** - 本地加密存储聊天记录 - **消息状态** - 发送状态、已读回执等 - **群组聊天** - 支持多人群组对话 ### 📁 文件传输 - **大文件支持** - 支持任意大小文件传输 - **分片传输** - 文件自动分片,提高传输效率 - **断点续传** - 网络中断后可继续传输 - **传输进度** - 实时显示传输进度和状态 ### 👥 社交功能 - **好友管理** - 好友列表、添加、删除功能 - **在线状态** - 实时显示好友在线状态 - **黑名单** - 屏蔽不受欢迎的用户 - **用户搜索** - 通过用户名查找用户 ## 🚀 快速开始 ### 📋 系统要求 - **Go版本**: 1.21 或更高 - **操作系统**: Windows 10+, Linux, macOS 10.15+ - **内存**: 最少 64MB RAM - **网络**: 支持TCP/UDP通信 ### 📦 安装方式 #### 方式一:从源码构建 ```bash # 1. 克隆项目 git clone https://github.com/your-username/t-chat.git cd t-chat # 2. 下载依赖 go mod download # 3. 构建应用 go build -o tchat.exe . ``` #### 方式二:直接下载 从 [Releases](https://github.com/your-username/t-chat/releases) 页面下载对应平台的预编译版本。 ### 🎮 首次使用 ```bash # 1. 创建用户账户 ./tchat.exe account create # 2. 启动应用(交互式登录) ./tchat.exe # 3. 或者自动登录 ./tchat.exe --username your_username --password your_password ``` ## 📚 使用指南 ### 账户管理 ```bash # 创建新账户 ./tchat.exe account create # 列出所有账户 ./tchat.exe account list # 查看当前账户信息 ./tchat.exe account info # 修改账户密码 ./tchat.exe account passwd # 删除账户 ./tchat.exe account delete --username username ``` ### 聊天功能 ```bash # 启动聊天模式 ./tchat.exe chat start # 发送消息 ./tchat.exe chat send --to username --message "Hello World!" # 查看聊天历史 ./tchat.exe chat history --with username # 清空聊天记录 ./tchat.exe chat clear --with username ``` ### 文件传输 ```bash # 发送文件 ./tchat.exe file send --to username --file /path/to/file # 查看传输状态 ./tchat.exe file status # 列出接收的文件 ./tchat.exe file list # 取消传输 ./tchat.exe file cancel --id transfer_id ``` ### 好友管理 ```bash # 添加好友 ./tchat.exe friend add --username friend_name # 查看好友列表 ./tchat.exe friend list # 查看在线好友 ./tchat.exe friend online # 删除好友 ./tchat.exe friend remove --username friend_name # 屏蔽用户 ./tchat.exe friend block --username username ``` ### 网络诊断 ```bash # 查看网络状态 ./tchat.exe status # 查看连接的节点 ./tchat.exe peers # 测试网络连接 ./tchat.exe ping --target node_id # 显示路由信息 ./tchat.exe show routes ``` ### 系统管理 ```bash # 查看系统信息 ./tchat.exe system info # 查看内存使用 ./tchat.exe system memory # 重新加载配置 ./tchat.exe system reload # 清空屏幕 ./tchat.exe system clear ``` ## 🏗️ 架构设计 ### 📁 项目结构 ``` t-chat/ ├── 📄 main.go # 主程序入口 ├── ⚙️ config.json # 配置文件 ├── 📋 go.mod # Go模块依赖 ├── 📖 README.md # 项目说明 ├── 📁 cmd/ # CLI命令模块 │ ├── root.go # 根命令和全局参数 │ ├── account.go # 账户管理命令 │ ├── chat.go # 聊天功能命令 │ ├── file.go # 文件传输命令 │ ├── friend.go # 好友管理命令 │ ├── peers.go # 节点管理命令 │ ├── ping.go # 网络测试命令 │ ├── status.go # 状态查询命令 │ └── system.go # 系统管理命令 ├── 📁 config/ # 配置管理 │ └── config.go # 配置结构和加载逻辑 ├── 📁 internal/ # 内部核心模块 │ ├── 👤 account/ # 账户管理模块 │ │ ├── manager.go # 账户管理器 │ │ ├── login.go # 登录服务 │ │ ├── crypto.go # 加密服务 │ │ └── storage.go # 存储服务 │ ├── 💬 chat/ # 聊天功能模块 │ │ ├── manager.go # 聊天管理器 │ │ ├── message.go # 消息处理 │ │ ├── session.go # 会话管理 │ │ └── encrypt.go # 消息加密 │ ├── 📁 file/ # 文件传输模块 │ │ ├── transmission.go # 传输管理 │ │ ├── chunk.go # 文件分片 │ │ ├── window.go # 滑动窗口 │ │ └── progress.go # 传输进度 │ ├── 👥 friend/ # 好友管理模块 │ │ ├── list.go # 好友列表 │ │ ├── status.go # 在线状态 │ │ └── blacklist.go # 黑名单管理 │ ├── 🌐 network/ # 网络通信模块 │ │ ├── pinecone_service.go # Pinecone服务 │ │ ├── mdns_service.go # mDNS发现服务 │ │ ├── route_discovery.go # 路由发现 │ │ └── connection_manager.go # 连接管理 │ ├── 🌲 pinecone/ # Pinecone协议实现 │ │ ├── router/ # 路由器实现 │ │ ├── sessions/ # 会话管理 │ │ ├── multicast/ # 多播支持 │ │ └── bluetooth/ # 蓝牙支持 │ └── 📝 logger/ # 日志系统 ├── 📁 accounts/ # 用户账户数据目录 ├── 📁 messages/ # 聊天记录存储目录 ├── 📁 files/ # 文件传输缓存目录 └── 📁 logs/ # 日志文件目录 ``` ### 🔧 技术栈 #### 核心技术 - **Go 1.21+** - 主要开发语言 - **Pinecone协议** - 去中心化P2P网络协议 - **Ed25519** - 椭圆曲线数字签名算法 - **AES-GCM** - 认证加密算法 - **mDNS** - 多播DNS服务发现 #### 主要依赖 - **github.com/spf13/cobra** - CLI命令行框架 - **golang.org/x/crypto** - Go官方加密算法库 - **github.com/gorilla/websocket** - WebSocket通信库 - **github.com/quic-go/quic-go** - QUIC协议实现 - **go.uber.org/zap** - 高性能结构化日志库 ### 🏛️ 架构特点 #### 去中心化设计 - **无中央服务器** - 完全基于P2P网络通信 - **自动发现** - 通过mDNS自动发现局域网节点 - **路由自愈** - 网络拓扑变化时自动重新路由 - **多传输方式** - 支持TCP、QUIC、蓝牙等多种传输 #### 安全机制 - **端到端加密** - 消息和文件传输全程加密 - **身份验证** - 基于Ed25519公钥的身份验证 - **密钥管理** - 安全的密钥生成、存储和交换 - **防重放攻击** - 消息序号和时间戳验证 #### 高可用性 - **断点续传** - 文件传输支持断点续传 - **自动重连** - 网络中断时自动重新连接 - **负载均衡** - 多路径传输和负载分散 - **故障恢复** - 节点故障时自动路由切换 ## ⚙️ 配置说明 ### 配置文件 应用首次运行时会自动创建 `config.json` 配置文件: ```json { "log_level": "info", "log_file": "tchat.log", "account_dir": "accounts", "message_dir": "messages", "file_dir": "files", "mdns_port": 5353, "pinecone_listen": ":7777", "pinecone_peers": [] } ``` ### 配置项说明 | 配置项 | 类型 | 默认值 | 说明 | |--------|------|--------|------| | `log_level` | string | "info" | 日志级别 (debug/info/warn/error) | | `log_file` | string | "tchat.log" | 日志文件路径 | | `account_dir` | string | "accounts" | 用户账户数据存储目录 | | `message_dir` | string | "messages" | 聊天记录存储目录 | | `file_dir` | string | "files" | 文件传输缓存目录 | | `mdns_port` | int | 5353 | mDNS服务发现端口 | | `pinecone_listen` | string | ":7777" | Pinecone协议监听地址 | | `pinecone_peers` | array | [] | 静态连接的对等节点地址列表 | ### 环境变量 | 变量名 | 说明 | 示例 | |--------|------|------| | `TCHAT_CONFIG` | 配置文件路径 | `/path/to/config.json` | | `TCHAT_LOG_LEVEL` | 日志级别 | `debug` | | `TCHAT_DATA_DIR` | 数据目录 | `/path/to/data` | ## 🛠️ 开发文档 ### 开发环境搭建 ```bash # 1. 安装Go 1.21+ # 从 https://golang.org/dl/ 下载安装 # 2. 克隆项目 git clone https://github.com/your-username/t-chat.git cd t-chat # 3. 安装依赖 go mod download # 4. 运行测试 go test ./... # 5. 构建项目 go build -o tchat.exe . ``` ### 代码规范 - 遵循 [Go Code Review Comments](https://github.com/golang/go/wiki/CodeReviewComments) - 使用 `gofmt` 格式化代码 - 使用 `golint` 检查代码质量 - 函数和方法需要添加注释 - 导出的类型和函数必须有文档注释 ### 测试指南 ```bash # 运行所有测试 go test ./... # 运行特定包的测试 go test ./internal/chat # 运行测试并显示覆盖率 go test -cover ./... # 生成覆盖率报告 go test -coverprofile=coverage.out ./... go tool cover -html=coverage.out ``` ### 调试技巧 ```bash # 启用调试日志 ./tchat.exe --log-level=debug # 查看网络连接状态 ./tchat.exe status # 测试网络连通性 ./tchat.exe ping --target node_id # 查看详细系统信息 ./tchat.exe system debug ``` ## 🤝 贡献指南 我们欢迎所有形式的贡献! ### 如何贡献 1. **Fork** 本项目 2. 创建特性分支 (`git checkout -b feature/AmazingFeature`) 3. 提交更改 (`git commit -m 'Add some AmazingFeature'`) 4. 推送到分支 (`git push origin feature/AmazingFeature`) 5. 开启 **Pull Request** ### 贡献类型 - 🐛 **Bug修复** - 修复已知问题 - ✨ **新功能** - 添加新的功能特性 - 📚 **文档** - 改进项目文档 - 🎨 **代码优化** - 改进代码结构和性能 - 🧪 **测试** - 添加或改进测试用例 ### 开发规范 - 遵循Go语言编码规范 - 添加必要的单元测试 - 更新相关文档 - 确保代码通过所有测试 - 提交信息使用英文,格式清晰 ## 📄 许可证 本项目采用 [MIT License](LICENSE) 许可证。 ## 🙏 致谢 感谢以下开源项目的支持: - [Pinecone](https://github.com/matrix-org/pinecone) - P2P网络协议 - [Cobra](https://github.com/spf13/cobra) - CLI框架 - [Go Crypto](https://golang.org/x/crypto) - 加密算法库 ## 📞 联系我们 - **作者**: tank - **邮箱**: it_luo@126.com - **项目主页**: [GitHub](https://github.com/your-username/t-chat) - **问题反馈**: [Issues](https://github.com/your-username/t-chat/issues) ---
**如果这个项目对你有帮助,请给我们一个 ⭐️** [⬆️ 回到顶部](#tchat---去中心化cli聊天应用)