update ftpclient

This commit is contained in:
ambrumf 2023-10-17 01:36:06 +08:00
parent 1f57b5e6b8
commit 4b3f4ce773
1 changed files with 69 additions and 11 deletions

View File

@ -224,23 +224,81 @@ int Download(char *name)
}
return 0;
}
int Upload(char* name)
{
int data_fd = socket(AF_INET, SOCK_STREAM, 0);
int len = 5000;
char* buf = malloc(len);
printf("uploading file %s\r\n", name);
int ret;
uint8_t addr[4];
int port;
ret = EnterPasv(addr, &port);
if (ret == -1) {
closesocket(data_fd);
return -1;
}
tcp_sock.sin_family = AF_INET;
tcp_sock.sin_port = htons(port);
tcp_sock.sin_addr.s_addr = PP_HTONL(LWIP_MAKEU32(addr[0],addr[1],addr[2],addr[3]));
memset(&(tcp_sock.sin_zero), 0, sizeof(tcp_sock.sin_zero));
ret = connect(data_fd, (struct sockaddr*)&tcp_sock, sizeof(struct sockaddr));
if(ret == -1){
printf("fail to connect data port\r\n");
return -1;
}
sprintf(sendBuffer, "STOR %s\r\n", name);
ret = SendCommand(sendBuffer);
if(ret == -1){
closesocket(data_fd);
return -1;
}
ret = RecvRespond(recvBuffer,1024);
if(ret!=150){
closesocket(data_fd);
return -1;
}
FILE* file = fopen(name, "r");
if (file == NULL) {
printf("failed to open file\n");
return -1;
}
int size = fread(buf, 1, sizeof(buf), file);
if (size == -1) {
printf("failed to read data\n");
return -1;
}
fclose(file);
ret = send(data_fd, buf, len);
closesocket(data_fd);
ret = RecvRespond(recvBuffer, 1024);
if (ret != 226) {
return -1;
}
return 0;
}
int TestFtp()
{
lwip_config_tcp(0, tcp_demo_ipaddr, tcp_demo_netmask, tcp_demo_gwaddr);
cmd_fd = socket(AF_INET, SOCK_STREAM, 0);
uint8_t ip[4] = { 192,168,130,70 };
Login(ip,21,"frank","114514");
Download("File0.txt");
Download("File1.txt");
Download("File2.txt");
Download("File3.txt");
Download("File4.txt");
Download("File5.txt");
Download("File6.txt");
Download("File7.txt");
Download("File8.txt");
Download("File9.txt");
Login(ip, 21, "frank", "114514");
Upload("File0.txt");
// Download("File0.txt");
// Download("File1.txt");
// Download("File2.txt");
// Download("File3.txt");
// Download("File4.txt");
// Download("File5.txt");
// Download("File6.txt");
// Download("File7.txt");
// Download("File8.txt");
// Download("File9.txt");
closesocket(cmd_fd);
return 0;