# Flash Send 跨平台局域网文件传输与聊天应用,基于 Tauri 2 + Vue 3 + Rust 构建。 ## 功能特性 - 🔍 **局域网设备发现** - UDP 广播自动发现同一网络内的设备 - 💬 **实时聊天** - WebSocket 实现的低延迟文本消息 - 📁 **文件传输** - HTTPS 加密传输,支持大文件 - 🔒 **安全通信** - TLS 加密所有通信,自签名证书 - 💾 **历史记录** - SQLite 本地存储聊天和传输记录 - 🎨 **现代 UI** - 扁平化设计,参考微信/LocalSend 风格 ## 技术栈 ### 后端 (Rust) - **Tauri 2** - 跨平台桌面应用框架 - **Tokio** - 异步运行时 - **Rustls** - TLS 加密 - **Axum** - HTTP 服务 - **tokio-tungstenite** - WebSocket - **rusqlite** - SQLite 数据库 ### 前端 (TypeScript) - **Vue 3** - 响应式 UI 框架 - **Pinia** - 状态管理 - **Vue Router** - 路由管理 - **TailwindCSS** - 样式框架 - **Lucide Icons** - 图标库 ## 项目结构 ``` flash-send/ ├── src/ # Vue 前端源码 │ ├── pages/ # 页面组件 │ ├── components/ # UI 组件 │ ├── stores/ # Pinia 状态管理 │ ├── api/ # Tauri API 封装 │ ├── hooks/ # Vue Hooks │ ├── types/ # TypeScript 类型 │ └── router/ # 路由配置 ├── src-tauri/ # Rust 后端源码 │ └── src/ │ ├── discovery/ # UDP 设备发现 │ ├── websocket/ # WebSocket 聊天 │ ├── http/ # HTTP 文件传输 │ ├── tls/ # TLS 加密 │ ├── database/ # SQLite 数据库 │ ├── models/ # 数据模型 │ ├── commands/ # Tauri 命令 │ └── utils/ # 工具函数 └── public/ # 静态资源 ``` ## 开发环境 ### 前置要求 - Node.js 18+ - Rust 1.70+ - pnpm 或 npm ### 安装依赖 ```bash # 安装前端依赖 npm install # Rust 依赖会在首次构建时自动安装 ``` ### 开发模式 ```bash npm run tauri dev ``` ### 构建发布 ```bash npm run tauri build ``` ## 通信协议 ### UDP 设备发现 (端口 53317) ```json { "version": 1, "device": { "deviceId": "uuid", "deviceName": "设备名", "ip": "192.168.1.100", "wsPort": 53318, "httpPort": 53319, "capabilities": ["text", "image", "file"] }, "packetType": "announce|query|response|goodbye" } ``` ### WebSocket 消息 (端口 53318) ```json { "id": "uuid", "type": "text|image|event|ack|ping|pong", "content": "消息内容", "from": "发送者设备ID", "to": "接收者设备ID", "timestamp": 1700000000, "status": "pending|sent|delivered|read|failed" } ``` ### HTTP 文件传输 (端口 53319) - `POST /upload` - 上传文件 - `GET /file/:id` - 下载文件 - `GET /file/:id/info` - 获取文件信息 - `GET /health` - 健康检查 ## 许可证 MIT License