ftpclient

This commit is contained in:
senorisky 2023-10-05 08:50:51 -07:00
parent 3aea5d919e
commit 44a5cb0d24
7 changed files with 1233 additions and 1 deletions

View File

@ -134,7 +134,7 @@ ifeq ($(CONFIG_ADD_XIZI_FEATURES),y)
endif
ifeq ($(CONFIG_USER_TEST_FTPCLIENT),y)
SRC_FILES +=
SRC_FILES += test_ftpclient/test_ftpclient.c
endif
ifeq ($(CONFIG_USER_TEST_LORA_P2P),y)

View File

@ -0,0 +1,71 @@
# 基于矽璓已实现的Lwip在ARM上实现FTP协议的Client功能##
## 1. 简介
基于矽璓已实现的Lwip在ARM上实现FTP协议的Client功能实现文件的上传与下载。
即基于XiZi内核移植支持FTP Client库个人电脑中安装FTP服务端软件充当FTP Server角色在其上上传10个4KB文件执行FTP协议的Client实现下载FTP Server上的10个文件。
## 2. 数据结构设计说明
定义zFTP通信管理数据结构
```
typedef struct zftp_client_struct {
char user_name[ZFTP_USER_NAME_LEN];
char password[ZFTP_PASSWORD_LEN];
char server_ip[ZFTP_SERVER_IP_LEN];
char data_port[6];
char control_port[6];
int control_socket; /* FTP控制socket */
int data_socket; /* FTP数据socket */
down_callback download_write;
up_callback upload_read;
void* user_data;
int errorno;
}zftp_client;
```
---------
ftp登录函数
```
zftp_client* zFTP_login(char* user_name, char* password, char* server_ip);
```
---------
文件上传与回显
```
int zFTP_set_callback(zftp_client* ftp, down_callback dw_write, up_callback up_read, void* user_data);
```
---------
得到文件大小
```
int zFTP_get_filesize(zftp_client* ftp, char* file_name, rt_uint32_t* file_size);
```
---------
改变ftp服务器路径
```
int zFTP_change_path(zftp_client* ftp, char* path);
```
---------
从服务器下载文件
```
int zFTP_download_file(zftp_client* ftp, char* file_name);
```
---------
上传文件到ftp服务器
```
int zFTP_upload_file(zftp_client* ftp, char* file_name);
```
---------
退出登录并且停止服务器
```
int zFTP_quit(zftp_client* ftp);
```
---------
## 3. 测试程序说明
测试了文件的上传与下载FTP的TCP链接未建立成功
## 4. 运行结果(##需结合运行测试截图按步骤说明##
编译烧录bin文件
![image](compile.png)
查看shell命令
![image](command.png)
测试结果
![image](test.png)

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 143 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,128 @@
/**
* @file test_ftpclient.h
* @author Zhao shimin
* @brief ftp
* @version 0.1
* @date 2023-10-05
*
* @copyright Copyright (c) 2023
* from https://github.com/longtengmcu/zFTP/blob/master/inc/zFTP.h
*/
/*********************************************************************************************************
*       FTP的客户端的存储的缓冲区长<EFBFBD>?
*********************************************************************************************************/
#ifndef ZFTP_USER_NAME_LEN
#define ZFTP_USER_NAME_LEN 20
#endif
#ifndef ZFTP_PASSWORD_LEN
#define ZFTP_PASSWORD_LEN 20
#endif
#ifndef ZFTP_SERVER_IP_LEN
#define ZFTP_SERVER_IP_LEN 20
#endif
#ifndef ZFTP_FILE_DATA_BUF_SIZE
#define ZFTP_FILE_DATA_BUF_SIZE 4096 //单位字节
#endif
#define ZFTP_SERVER_CONTROL_PORT "21"
#define ZFTP_SERVER_DATA_PORT "22"
/*FTP communicate command timeout, unit:ms */
#define ZFTP_CMD_TIMEOUT 2000
typedef int32_t rt_uint32_t;
typedef int16_t rt_uint16_t;
typedef int8_t rt_uint8_t;
typedef int (*down_callback)(void* handle, char* file_name, rt_uint8_t* buf, rt_uint32_t len, rt_uint32_t file_pos, rt_uint32_t total_len);
typedef int (*up_callback)(void* handle, char* file_name, rt_uint8_t* buf, rt_uint32_t len, rt_uint32_t file_pos, rt_uint32_t* read_len, rt_uint32_t* total_len);
/*********************************************************************************************************
*       zFTP通信管理数据结构
*********************************************************************************************************/
typedef struct zftp_client_struct {
char user_name[ZFTP_USER_NAME_LEN];
char password[ZFTP_PASSWORD_LEN];
char server_ip[ZFTP_SERVER_IP_LEN];
char data_port[6];
char control_port[6];
int control_socket; /* FTP控制socket */
int data_socket; /* FTP数据socket */
down_callback download_write;
up_callback upload_read;
void* user_data;
int errorno;
}zftp_client;
/*********************************************************************************************************
** Function name<EFBFBD>? zFTP_login()
** Descriptions: ftp login server
** input parameters<EFBFBD>? user_name, password, server_ip
** output parameters<EFBFBD>? None
** Returned value: zftp_client
*********************************************************************************************************/
zftp_client* zFTP_login(char* user_name, char* password, char* server_ip);
/*********************************************************************************************************
** Function name<EFBFBD>? zFTP_set_callback()
** Descriptions: set the file download and upload callback function
** input parameters<EFBFBD>? ftp, dw_write, up_read, user_data
** output parameters<EFBFBD>? None
** Returned value: RT_EOK
*********************************************************************************************************/
int zFTP_set_callback(zftp_client* ftp, down_callback dw_write, up_callback up_read, void* user_data);
/*********************************************************************************************************
** Function name<EFBFBD>? zFTP_get_filesize()
** Descriptions: get the file size from FTP server
** input parameters<EFBFBD>? ftp, path, file_name
** output parameters<EFBFBD>? file_size
** Returned value: zftp_client
*********************************************************************************************************/
int zFTP_get_filesize(zftp_client* ftp, char* file_name, rt_uint32_t* file_size);
/*********************************************************************************************************
** Function name<EFBFBD>? zFTP_change_path()
** Descriptions: change the path of FTP server
** input parameters<EFBFBD>? ftp, path, path
** output parameters<EFBFBD>? file_size
** Returned value: zftp_client
*********************************************************************************************************/
int zFTP_change_path(zftp_client* ftp, char* path);
/*********************************************************************************************************
** Function name<EFBFBD>? zFTP_download_file()
** Descriptions: download the file from FTP server
** input parameters<EFBFBD>? ftp, path, file_name
** output parameters<EFBFBD>? file_size
** Returned value: zftp_client
*********************************************************************************************************/
int zFTP_download_file(zftp_client* ftp, char* file_name);
/*********************************************************************************************************
** Function name<EFBFBD>? zFTP_upload_file()
** Descriptions: upload the file to FTP server
** input parameters<EFBFBD>? ftp, path, file_name
** output parameters<EFBFBD>? file_size
** Returned value: zftp_client
*********************************************************************************************************/
int zFTP_upload_file(zftp_client* ftp, char* file_name);
/*********************************************************************************************************
** Function name<EFBFBD>? zFTP_quit()
** Descriptions: ftp logout and realse the zftp_client
** input parameters<EFBFBD>? ftp
** output parameters<EFBFBD>? None
** Returned value: RT_EOK
*********************************************************************************************************/
int zFTP_quit(zftp_client* ftp);