局域网聊天工具

局域网聊天工具

仓库地址:https://github.com/Sunrisies/lan-share.git

一个基于 Rust + Axum 的局域网实时聊天工具,支持文本、图片和文件分享。

功能特性

  • ✅ 实时文本聊天
  • ✅ 图片上传和预览
  • ✅ 文件上传和下载
  • ✅ 在线用户数量显示
  • ✅ 消息历史记录
  • ✅ 消息时间戳
  • ✅ 文件大小限制提示(100MB)
  • ✅ 消息提示弹窗
  • ✅ 自动滚动到最新消息

技术栈

  • 后端: Rust + Axum + Tokio + WebSocket
  • 前端: HTML + Tailwind CSS + JavaScript
  • 通信: WebSocket 实时通信
  • 文件处理: Multipart 文件上传

快速开始

环境要求

  • Rust 1.70+
  • Cargo

安装

bash 复制代码
# 克隆项目
git clone https://github.com/Sunrisies/lan-share.git
cd lan-share

# 编译项目
cargo build --release

# 运行项目
cargo run

访问

服务器启动后,访问 http://localhost:3000

使用说明

聊天功能

  1. 发送文本消息

    • 在输入框中输入消息
    • 按 Enter 键或点击"发送"按钮
  2. 发送图片

    • 点击附件按钮
    • 选择图片文件
    • 图片会自动上传并显示预览
  3. 发送文件

    • 点击附件按钮
    • 选择任意文件
    • 文件会自动上传,其他用户可下载

界面说明

  • 在线用户数量: 页面顶部显示当前在线用户数
  • 消息历史: 新用户加入时可查看之前的消息
  • 时间戳: 每条消息显示发送时间
  • 消息提示: 操作成功或失败会显示提示弹窗

配置说明

修改端口

编辑 src/main.rs 文件:

rust 复制代码
let addr = SocketAddr::from(([0, 0, 0, 0], 3000)); // 修改端口号

修改文件大小限制

编辑 src/main.rs 文件:

rust 复制代码
const MAX_FILE_SIZE: usize = 100 * 1024 * 1024; // 修改大小限制(字节)

修改历史消息数量

编辑 src/main.rs 文件:

rust 复制代码
if history.len() > 100 { // 修改历史消息数量
    history.remove(0);
}

项目结构

复制代码
synchronization/
├── src/
│   └── main.rs          # 后端主程序
├── static/
│   └── index.html       # 前端界面
├── shared_files/        # 上传文件存储目录
├── Cargo.toml           # 项目依赖
└── README.md            # 项目文档

API 接口

WebSocket

  • 连接地址 : ws://localhost:3000/ws
  • 消息格式: JSON
消息类型
  1. 文本消息
json 复制代码
{
  "type": "message",
  "content": "消息内容",
  "sender_id": "用户ID"
}
  1. 图片消息
json 复制代码
{
  "type": "image",
  "content": "",
  "sender_id": "用户ID",
  "file_url": "/files/xxx.jpg",
  "file_name": "图片.jpg",
  "file_type": "image"
}
  1. 文件消息
json 复制代码
{
  "type": "file",
  "content": "",
  "sender_id": "用户ID",
  "file_url": "/files/xxx.zip",
  "file_name": "文件.zip",
  "file_type": "file"
}

HTTP

  • GET / - 主页面
  • POST /upload - 文件上传
  • GET /files/{filename} - 文件下载
  • GET /files - 文件列表

常见问题

1. 文件上传失败

  • 检查文件大小是否超过 100MB
  • 检查网络连接是否正常
  • 查看服务器控制台错误信息

2. WebSocket 连接失败

  • 确保服务器正在运行
  • 检查防火墙设置
  • 确认端口未被占用

3. 无法访问其他设备

  • 确保所有设备在同一局域网
  • 检查服务器绑定地址(默认 0.0.0.0)
  • 检查防火墙设置
相关推荐
程序员爱钓鱼6 分钟前
Rust HashMap 详解:键值存储、查询、更新与统计
后端·面试·rust
寒水馨32 分钟前
macOS下载、安装electron-v43.2.0(附安装包electron-v43.2.0-darwin-arm64.zip)
javascript·macos·electron·node.js·跨平台·桌面应用开发·开源框架
光影少年1 小时前
RN 路由栈管理、页面销毁、返回拦截
javascript·react native·react.js
_lucas1 小时前
做了一个glsl在线调试工具
前端·javascript·three.js
To_OC9 小时前
LC 51 N 皇后:我以为难的是回溯,结果栽在了对角线下标
javascript·算法·leetcode
小林ixn11 小时前
从零到一理解 React 父子组件通信:手写一个 Todo 应用带你彻底搞懂单向数据流
前端·javascript·react.js
窝子面13 小时前
手搓最简前后端协作-node
javascript·数据库
doiito13 小时前
【AI 应用】从“外国人味”到地道中文:kokoroi-rs v0.1.2 架构升级深度解析
ai·rust·系统设计
kyriewen14 小时前
我让AI给前端项目做了一次完整的Code Review——它和人类的差距,比我想的大得多
前端·javascript·ai编程
এ慕ོ冬℘゜14 小时前
前端基础:什么是时间戳?JS获取时间戳三种方法与实战用途
开发语言·前端·javascript