# File_Transfer **Repository Path**: YW_Space/file-transfer ## Basic Information - **Project Name**: File_Transfer - **Description**: 文件传输(也可以申请连接进行内部通信) - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-07 - **Last Updated**: 2026-09-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 文件传输系统(RK3568 图形化版本) 基于 TCP 的文件传输系统:**PC 服务器 + RK3568 ARM 板图形客户端(LVGL 9.0)**。 ``` 项目/1.文件传输/ ├── CMakeLists.txt # 交叉编译工程(仅 ARM 目标:client / gui_client) ├── build_pc.sh # 项目编译脚本(PC server + ARM client/gui_client) ├── lv_conf.h # LVGL 配置(笔记 0805/my_inc) ├── lvgl/ # LVGL 9.0 库 ├── lv_font_cn_16.c # 中文字体(由笔记思源黑体生成,覆盖 GB2312 一级汉字) ├── gui_client.c # 图形化客户端(LVGL 界面 + 触摸屏操作) ├── gui_net.c / gui_net.h # 图形客户端网络层(recv_thread + 心跳 + 响应队列) ├── client.c / client_util.c/h # 命令行客户端(ARM,调试用) ├── server.c / server_util.c/h # 文件传输服务器(PC 版) ├── thread_pool.c/h # 服务器线程池 ├── cJSON.c/h # JSON 编解码 ├── log.h # 日志模块 ├── download/ # 客户端下载目录 └── tools/ # 字体生成工具(build_font.sh / gen_font.js / 字符集) ``` ## 构建产物位置 | 产物 | 架构 | 生成位置 | 运行机器 | |---|---|---|---| | `server` | x86 (PC gcc) | **项目根目录** `./server` | PC | | `client` | ARM (交叉编译) | `/home/china/tftpboot/client` | RK3568 板 | | `gui_client` | ARM (交叉编译) | `/home/china/tftpboot/gui_client` | RK3568 板 | - server 用 **PC 本机 gcc** 编译(`build_pc.sh`),不是交叉编译。 - client / gui_client 用 **arm-linux-gcc 交叉编译**(CMakeLists.txt),输出到板子共享目录 tftpboot。 ## 构建(脚本) 在装有 RK3568 工具链 + gcc 的 Linux 主机上,项目根目录执行: ```bash bash build_pc.sh # 完整构建:PC server + ARM client/gui_client bash build_pc.sh server # 只编译 PC 版 server bash build_pc.sh arm # 只交叉编译 ARM 目标 ``` ## 运行 1. **PC 启动服务器**(项目根目录): ```bash ./server 0.0.0.0 9999 ``` 共享目录默认 `/home/china/tftpboot`(server.c 中 `SERVER_DIR`,要共享的文件放这里)。 如需改路径,修改 `server.c` 第 21 行后重新 `bash build_pc.sh server`。 2. **板子运行图形客户端**(RK3568,接 LCD + 触摸屏): ```bash /home/china/tftpboot/gui_client ``` - 连接页:输入 PC 的 IP 与端口 9999(触摸输入框弹出软键盘)→ 点"连接"。 - 主界面:点"刷新"查看服务器文件;点击表格行选中 → "下载";输入本地文件名 → "上传";"发消息"(需先配对);"退出"断开。 - 下载文件保存到运行目录下的 `download/`。 3. **板子运行命令行客户端**(可选调试): ```bash /home/china/tftpboot/client ``` ## 中文字体 - 界面中文用 `lv_font_cn_16.c`(16px,覆盖 ASCII + GB2312 一级汉字 3755 字 + 界面符号),由笔记中的思源黑体 `SourceHanSansCN-Medium-2.otf` 生成,避免 LVGL 内置字体缺字(如"载""传""输"显示方块)。 - 重新生成字体:`cd tools && bash build_font.sh`(需 node.js,首次会自动安装 lv_font_conv)。 - 如需扩充字符,编辑 `tools/chars_all.txt` 后重新生成。 ## 图形客户端设计说明 - **UI 线程**:`main()` 中 `lv_init()` → fbdev/evdev 初始化 → `lv_timer_handler()` + `usleep(5000)` 主循环。 - **网络线程**:`recv_thread` 后台读 socket,JSON 业务响应入队,文件传输响应自动置 `g_file_transfer_active` 阻塞自身;`heartbeat_thread` 每 30s 发 ping。 - **任务模型**:按钮回调只把参数拷入 `g_task`(GUI 线程),网络操作放后台线程执行,`ui_poll_timer_cb`(200ms)轮询完成标志刷新界面,避免触摸卡顿。 - **线程安全**:recv_thread 的推送消息写入加锁缓冲区,由 poll timer 显示;GUI 控件只在主线程操作。