# lan-chat **Repository Path**: suplyang/lan-chat ## Basic Information - **Project Name**: lan-chat - **Description**: 本方案设计一款轻量级内网聊天工具,服务启动后自动提供页面地址,用户通过浏览器访问即可加入聊天室,支持文字聊天、图片发送及文件传输。 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-05-02 - **Last Updated**: 2026-05-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 局域网聊天工具 Go + WebSocket + 原生前端的轻量级内网聊天工具,双击即运行,无需任何依赖。 ## 功能特性 - 文字聊天 - 图片发送与预览(支持灯箱放大) - 文件传输下载 - 在线用户列表 - 修改昵称 - 聊天历史记录(最近 N 条,新用户加入时自动推送) - 单文件 exe,无需数据库,无需运行时 ## 快速开始 ### 运行(预编译版) 双击 `chat.exe`,控制台显示访问地址,例如: ``` 局域网聊天服务已启动 访问地址:http://192.168.1.100:19527 ``` 同网段设备用浏览器打开该地址即可加入聊天。 ### 从源码构建 ```bash go build -ldflags="-s -w -H windowsgui" -o chat.exe main.go server.go ``` - `-H windowsgui`:隐藏命令行窗口,双击不弹黑窗 - `-s -w`:去除调试信息,减小体积 如需将前端文件编译进 exe,使用 embed 标签构建: ```bash go build -tags embed -ldflags="-s -w -H windowsgui" -o chat.exe main_embed.go server.go ``` ## 命令行参数 | 参数 | 默认值 | 说明 | |------|--------|------| | `-port` | 19527 | 服务监听端口 | | `-max-file-size` | 200 | 单个文件最大大小(MB) | | `-history` | 100 | 保留的消息历史条数 | 示例: ```bash chat.exe -port 8080 -max-file-size 500 -history 200 ``` ## 技术架构 - **后端**:Go,单进程同时提供 HTTP + WebSocket,无外部依赖 - **通信**:WebSocket 全双工,JSON 协议 - **前端**:原生 HTML/CSS/JS,无构建工具 - **文件存储**:本地 `uploads/` 目录 - **用户识别**:首次访问分配随机昵称(如"游客1234"),可自行修改 - **消息持久化**:内存存储,重启即清(如需持久化可改用 SQLite) ## 项目结构 ``` lan-chat-server/ ├── server.go # 核心逻辑(HTTP/WebSocket/业务处理) ├── main.go # 非 embed 模式入口(从 static/ 读取前端文件) ├── main_embed.go # embed 模式入口(前端文件编译进二进制) ├── static/ │ └── index.html # 前端页面(HTML/CSS/JS 合一) ├── nicknames.json # 昵称记录(重启后保留昵称分配记录) ├── uploads/ # 用户上传文件存放目录(运行时自动创建) └── chat.exe # 编译产物 ``` ## 消息协议 | 消息类型 | 方向 | 说明 | |----------|------|------| | `init` | 客户端 → 服务端 | 首次连接,携带指纹和昵称 | | `text` | 双向 | 文字消息 | | `file` | 双向 | 文件/图片消息,含 URL 和元信息 | | `nickname` | 双向 | 昵称变更 | | `join` | 服务端 → 客户端 | 有用户加入 | | `leave` | 服务端 → 客户端 | 有用户离开 | | `online` | 服务端 → 客户端 | 在线用户列表 | | `welcome` | 服务端 → 客户端 | 欢迎消息,含历史记录和用户列表 |