2023_open_source_contest_final_1st_issue3

This commit is contained in:
JasenChao 2023-09-18 10:54:19 +08:00
parent 7cf8009816
commit fb02dae0cd
5 changed files with 29 additions and 19 deletions

View File

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

View File

@ -1,4 +1,4 @@
# # 基于矽璓已实现的Lwip在ARM上实现FTP协议的Client功能
# 基于矽璓已实现的Lwip在ARM上实现FTP协议的Client功能
## 1. 简介
@ -21,7 +21,7 @@ typedef struct ftp_client_struct
}ftp_client;
```
一共实现了 8 个函数,其中 4 个为接口函数,分别为:
一共实现了 8 个函数,其中 5 个为接口函数,分别为:
- `ftp_cmd`:向 FTP server 发送指令
- `ftp_downloaddata`:从 FTP server 接收数据

View File

@ -397,15 +397,15 @@ ftp_client *ftp_login(char *addr, char *username, char *password)
hints.ai_protocol = IPPROTO_TCP;
/* Connect to control port */
if (getaddrinfo(ftp->server_ip, ftp->control_port, &hints, &result) != 0) goto __exit;
if (getaddrinfo(ftp->server_ip, ftp->control_port, &hints, &result) != 0) goto __exit;
for (cur = result; cur != NULL; cur = cur->ai_next) {
fd = socket(cur->ai_family, cur->ai_socktype, cur->ai_protocol);
if (fd < 0) continue;
if (connect(fd, cur->ai_addr, cur->ai_addrlen) == 0) {
ftp->control_socket = fd;
break;
}
fd = socket(cur->ai_family, cur->ai_socktype, cur->ai_protocol);
if (fd < 0) continue;
if (connect(fd, cur->ai_addr, cur->ai_addrlen) == 0) {
ftp->control_socket = fd;
break;
}
}
freeaddrinfo(result);
@ -517,12 +517,12 @@ int ftp_downloadfile(ftp_client *ftp, char *file_name)
int f = PrivOpen(name, O_RDWR|O_CREAT);
/* Read the file */
while(file_size > file_pos) {
if (ftp_downloaddata(ftp->data_socket, 10000, filebuf, 16, &getlen) == 0) {
if (ftp_downloaddata(ftp->data_socket, 10000, filebuf, 128, &getlen) == 0) {
if (getlen) {
ret = PrivWrite(f, filebuf, strlen(filebuf));
if (ret < 0) {
printf("write failed,error:%d\n", ret);
return ret;
goto __exit;
}
} else {
ret = -1;
@ -559,7 +559,6 @@ int ftp_uploadfile(ftp_client *ftp, char *file_name)
int getlen = 0;
int file_pos = 0;
int port = 0;
int file_size = 0;
char filebuf[128] = {0};
@ -609,11 +608,20 @@ int ftp_uploadfile(ftp_client *ftp, char *file_name)
goto __exit;
}
/* TODO: update file_size */
char name[64];
sprintf(name, "/%s", file_name);
int f = PrivOpen(name, O_RDONLY);
if (f < 0) {
printf("Open file error.\n");
return -1;
}
while(file_size > file_pos) {
/* TODO: read file and update filebuf */
if (ftp_uploaddata(ftp->data_socket, filebuf, 128, &getlen) == 0) {
while((ret = PrivRead(f, filebuf, 128)) != 0) {
if (ret < 0) {
printf("read failed.\n");
goto __exit;
}
if (ftp_uploaddata(ftp->data_socket, filebuf, ret, &getlen) == 0) {
if (!getlen) {
ret = -1;
goto __exit;
@ -676,5 +684,6 @@ int ftp_quit(ftp_client *ftp)
ftp->control_socket = -1;
free(ftp);
ftp = NULL;
return 0;
}

View File

@ -7,7 +7,7 @@
#include <transform.h>
#define CONTROL_PORT "21"
#define CONTROL_PORT "9991"
#define NOCMD 0
#define PASV 1
@ -36,5 +36,6 @@ typedef struct ftp_client_struct
ftp_client *ftp_login(char *addr, char *username, char *password);
int ftp_downloadfile(ftp_client *ftp, char *file_name);
int ftp_uploadfile(ftp_client *ftp, char *file_name);
int ftp_changedir(ftp_client *ftp, char *dir);
int ftp_quit(ftp_client *ftp);

View File

@ -529,7 +529,7 @@
* (only needed if you use the sequential API, like api_lib.c)
*/
#if !defined MEMP_NUM_NETCONN || defined __DOXYGEN__
#define MEMP_NUM_NETCONN 4
#define MEMP_NUM_NETCONN 20
#endif
/**