# file_transfer_project **Repository Path**: huenrong/file_transfer_project ## Basic Information - **Project Name**: file_transfer_project - **Description**: 1. 该工程实现文件传输功能 2. 实现串口传输和socket传输 3. 文件传输服务器只有linux命令行版本 4. 文件传输客户端实现windows和linux版本,并且windows版本实现界面功能 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 2 - **Created**: 2019-08-17 - **Last Updated**: 2021-11-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README **1. 项目说明**   (1) 该项目实现文件传输功能   (2) file_server接收文件, file_client发送文件 **2. 传输流程**   (1) 服务器一直处于监听状态, 客户端连接上服务端后首先发送需要传输的文件名   (2) 客户端传输完成后主动断开连接   (3) 传输完成后服务器需要修改启动文件中自启动程序名(目前未实现, 根据项目情况自行添加)   (4) 大致流程如下:   第1步: 客户端->服务器: 上传文件名      服务器->客户端: 应答文件名   第2步: 客户端->服务器: 上传文件大小      服务器->客户端: 应答文件大小   第3步: 客户端->服务器: 上传文件内容      服务器->客户端: 应答传输文件内容状态   第4步: 客户端->服务器: 上传传输文件内容结束消息      服务器->客户端: 应答文件服务器端接收文件结果   第5步: 客户端->服务器: 关闭socket      服务器->客户端: 再次判断传输结果,并进行升级替换处理 **3. 传输协议**   (1) 协议格式如下:     帧头(1字节) + 帧序号(1字节) + 数据类型(1字节) + 有效数据长度(2字节) + 有效数据 + CRC(2字节)   (2) 帧头分两种: 帧头 | 帧头含义 -|- AA | 客户端->服务器(CLIENT_HEAD) BB | 服务器->客户端(SERVER_HEAD)   (3) 帧序号从0~255循环   (4) 数据类型有四种: 数据类型 | 数据类型含义 -|- 0xA0 | 传输文件名(TRANSFER_FILE_NAME) 0xA1 | 传输文件大小(TRANSFER_FILE_SIZE) 0xA2 | 传输文件内容(TRANSFER_FILE_DATA) 0xA3 | 传输文件结束(TRANSFER_FILE_END)   (5) 传输应答类型 应答类型 | 应答类型含义 -|- 0x00 | 接收成功(RECV_OK) 0x01 | 帧头错误(HEAD_ERR) 0x02 | CRC错误(CRC_ERR) 0x03 | 文件传输成功(TRANSFER_OK) 0x04 | 文件传输失败(TRANSFER_FAIL) 0x0A | 其它错误(OTHER_ERR)   (6) 当客户端上传文件名或者文件大小时, 服务器应答相应内容   (7) 有效数据长度和CRC均采用小端模式   (8) CRC校验范围为CRC前所有内容, CRC采用Modbus CRC16校验算法, 见GB/T19582.2-2008 **4. 示例数据**   第1步: 客户端->服务器: 0xAA 0x00 0xA0 0x08 0x00 0x61 0x70 0x70 0x5F 0x31 0x2E 0x70 0x79 0xBB 0x61      服务器->客户端: 0xBB 0x00 0xA0 0x08 0x00 0x61 0x70 0x70 0x5F 0x31 0x2E 0x70 0x79 0x87 0x70   第2步: 客户端->服务器: 0xAA 0x01 0xA1 0x04 0x00 0xB4 0x00 0x00 0x00 0xDB 0x25      服务器->客户端: 0xBB 0x01 0xA1 0x04 0x00 0xB4 0x00 0x00 0x00 0x1B 0x75   第3步: 客户端->服务器: 0xAA 0x02 0xA2 0xB4 0x00 0x23 0x21 0x2F 0x75 0x73 0x72 0x2F 0x62 0x69 0x6E 0x2F 0x65 0x6E 0x76 0x20 0x70 0x79 0x74 0x68 0x6F 0x6E 0x0A 0x23 0x20 0x2D 0x2A 0x2D 0x20 0x63 0x6F 0x64 0x69 0x6E 0x67 0x3A 0x75 0x74 0x66 0x2D 0x38 0x20 0x2D 0x2A 0x2D 0x0A 0x0A 0x64 0x65 0x66 0x20 0x6D 0x79 0x5F 0x70 0x72 0x69 0x6E 0x74 0x66 0x28 0x29 0x3A 0x0A 0x20 0x20 0x20 0x20 0x70 0x72 0x69 0x6E 0x74 0x28 0x27 0x74 0x68 0x69 0x73 0x20 0x69 0x73 0x20 0x6D 0x79 0x5F 0x70 0x72 0x69 0x6E 0x74 0x66 0x20 0x66 0x75 0x6E 0x63 0x74 0x69 0x6F 0x6E 0x27 0x29 0x0A 0x20 0x20 0x20 0x20 0x0A 0x0A 0x0A 0x69 0x66 0x20 0x5F 0x5F 0x6E 0x61 0x6D 0x65 0x5F 0x5F 0x20 0x3D 0x3D 0x20 0x27 0x5F 0x5F 0x6D 0x61 0x69 0x6E 0x5F 0x5F 0x27 0x3A 0x0A 0x20 0x20 0x20 0x20 0x70 0x72 0x69 0x6E 0x74 0x28 0x27 0x68 0x65 0x6C 0x6C 0x6F 0x20 0x77 0x6F 0x72 0x6C 0x64 0x21 0x27 0x29 0x0A 0x20 0x20 0x20 0x20 0x6D 0x79 0x5F 0x70 0x72 0x69 0x6E 0x74 0x66 0x28 0x29 0x0A 0x0A 0x7E 0x01   第3步: 客户端->服务器: 0xBB 0x02 0xA2 0x01 0x00 0x00 0x10 0xE8   第4步: 客户端->服务器: 0xAA 0x03 0xA3 0x00 0x00 0xCC 0x7E      服务器->客户端: 0xBB 0x03 0xA3 0x01 0x00 0x03 0x6C 0xD5