# 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聊天应用
[](https://golang.org/)
[](LICENSE)
[]()
**一个基于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聊天应用)