Skip to content

cap153/LANChat

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

97 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

image

LANChat

一个跨平台的、无需注册的、支持文件传输的局域网聊天软件。

特性

  • 🚀 无需注册 - 自动生成随机用户名,可随时修改
  • 💻 跨平台支持 - Linux 桌面端、Windows 桌面端、Android App、Web 端
  • 🔍 自动发现 - 基于 UDP 广播的局域网设备自动发现
  • 💬 实时聊天 - 支持文本消息和文件传输
  • 📁 文件传输 - 支持大文件传输,可设置自动接收
  • 💾 历史记录 - SQLite 数据库保存聊天记录
  • 🌐 Web 端 - 可部署到无图形界面服务器

技术栈

  • 后端: Rust + Tauri 2.0
  • 前端: 原生 HTML + CSS + JavaScript
  • 数据库: SQLite (sqlx)
  • 网络: UDP 广播 + TCP 传输
  • Web 服务器: Axum

快速开始

aur

paru -S lanchat-bin

Releases

https://github.com/cap153/LANChat/releases

编译

前置要求:

https://v2.tauri.app/start/prerequisites/

# 桌面端
cargo tauri build --bundles deb
cargo tauri build --bundles rpm

# apk
cargo tauri android build --target aarch64
./sign-apk.sh

# windows桌面端
cd src-tauri
cargo xwin build --release --bin lanchat --target x86_64-pc-windows-msvc

# Web 端(精简版,无 GUI 依赖)
cd src-tauri
cargo build --release --bin lanchat-web --features web --no-default-features
cargo build --no-default-features --features web --release --target x86_64-pc-windows-gnu # windows网页端

也可以使用 Makefile 一键构建:

make all          # 构建测试过的所有平台
make deb          # Linux .deb
make rpm          # Linux .rpm
make apk          # Android APK(自动签名)
make windows-desktop  # Windows 桌面端(需要 cargo-xwin)
make web          # Web 端 Linux
make web-windows  # Web 端 Windows
make help         # 查看帮助

主题

支持自定义css,文件名称随意,存储路径:

  • Linux: ~/.config/lanchat/
  • Windows: %APPDATA%\.config\lanchat

可以参考内置的主题:https://github.com/cap153/LANChat/tree/main/src/css

数据库

默认路径

桌面端和 Web 端共享同一个数据库:

  • Linux: ~/.local/share/com.lanchat.app/lanchat.db
  • Windows: %APPDATA%\com.lanchat.app\lanchat.db

数据表

  • settings - 用户配置(用户名、自动接收、保存路径等)
  • messages - 聊天记录
  • users - 局域网发现的用户(计划中)

功能状态

✅ 已完成

  • 自动生成随机用户名
  • 用户改名功能(桌面端 + Web 端)
  • 局域网设备发现(UDP 广播)
  • 实时显示在线用户
  • Web 端独立部署
  • 桌面端和 Web 端共享数据库
  • 设置页面
  • 消息历史记录查询
  • 主题切换功能
  • Android 端适配
  • 文本消息传输
  • 文件传输功能
  • Windows 端适配
  • 单实例锁定功能
  • 文件流式传输
  • 根据系统内存动态调整文件分块大小
  • 支持广播和组播
  • Android 热点随机网段暴力覆盖
  • Web 端文件消息点击直接下载
  • 桌面端文件消息点击打开所在路径
  • Android 端接收其他应用分享的文件并发送
  • Android 端文件消息点击分享到其他应用
  • 桌面端、Web 端支持拖拽文件发送
  • 桌面端支持粘贴文件发送(零拷贝,Wayland 优先)
  • Web 端支持粘贴文件发送
  • 图片消息自动预览
  • 存在未读消息时红点标注
  • 历史消息懒加载(滚动时触发加载历史消息)
  • 删除历史聊天记录
  • Android 端文件消息点击打开
  • Android 端发送图片预览(权限未过期时生效)
  • 重复文件智能去重(接收端存在文件相同且完整直接引用,文件不同自动重命名)

🚧 进行中

  • Android 端三大金刚键自动缩进
  • 消息时间加上年月
  • 聊天室功能
  • 新消息系统通知(linux使用notify,windows使用powershell)
  • 更换默认图标

📋 计划中

  • 手动接收文件
  • 文件重新下载

运行

  1. 在服务器上运行(不指定参数将默认使用8888端口):
lanchat-web --port 8888
  1. 配置防火墙示例:
sudo ufw allow 8888/tcp
sudo ufw allow 8888/udp

项目结构

LANChat/
├── src/                      # 前端代码
│   ├── css/
│   │   └── style.css        # 样式文件
│   ├── js/
│   │   ├── api.js           # API 封装
│   │   ├── app.js           # 应用逻辑
│   │   └── ui.js            # UI 交互
│   └── index.html           # 主页面
├── src-tauri/               # 后端代码
│   ├── src/
│   │   ├── main.rs          # 桌面端入口
│   │   ├── server_main.rs   # Web 端入口
│   │   ├── lib.rs           # 库入口
│   │   ├── commands.rs      # Tauri 命令
│   │   ├── db.rs            # 数据库逻辑
│   │   ├── models.rs        # 数据模型
│   │   ├── utils.rs         # 工具函数
│   │   ├── web_server.rs    # Web 服务器
│   │   └── network/         # 网络模块
│   │       ├── discovery.rs # 设备发现
│   │       ├── protocol.rs  # 协议定义
│   │       └── transfer.rs  # 文件传输
│   ├── capabilities/        # Tauri 权限配置
│   ├── permissions/         # 自定义权限
│   └── Cargo.toml
├── AGENTS.md                # 开发计划和进度
└── README.md                # 本文件

贡献

欢迎提交 Issue 和 Pull Request!

许可证

MIT License

致谢

  • Tauri - 跨平台应用框架
  • Axum - Web 框架
  • SQLx - 异步 SQL 工具包

赞助

如果你觉得这个项目对你有帮助,可以请作者喝杯咖啡 ☕️

点击展开赞赏码 (WeChat Pay)


感谢您的支持!您的名字将被记录在 赞助者名单 中。

About

一款支持文件传输的跨平台局域网聊天软件,用Rust编写。A cross-platform LAN chat software that supports file transfer, written in Rust.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors