From ef60355feaa8cb720c8c50ab5f0554c140b1a655 Mon Sep 17 00:00:00 2001 From: Ambrumf <421653227@qq.com> Date: Fri, 20 Oct 2023 02:50:09 +0800 Subject: [PATCH] update client --- .../test_ftpclient_final.c | 70 ++++++++----------- 1 file changed, 30 insertions(+), 40 deletions(-) diff --git a/APP_Framework/Applications/app_test/test_ftpclient_final/test_ftpclient_final.c b/APP_Framework/Applications/app_test/test_ftpclient_final/test_ftpclient_final.c index 96a809b7c..025f8ab62 100644 --- a/APP_Framework/Applications/app_test/test_ftpclient_final/test_ftpclient_final.c +++ b/APP_Framework/Applications/app_test/test_ftpclient_final/test_ftpclient_final.c @@ -31,7 +31,6 @@ http://license.coscl.org.cn/MulanPSL2 pthread_mutex_t mutex; -char buf[5000]; static char tcp_demo_ipaddr[] = {192, 168, 3, 77}; static char tcp_demo_netmask[] = {255, 255, 255, 0}; @@ -40,36 +39,24 @@ static char tcp_demo_gwaddr[] = {192, 168, 3, 1}; //quoted from https://kerndev.blog.csdn.net/article/details/89383888 int SendCommand(char *cmd,int cmd_fd) { - pthread_mutex_lock(&mutex); int ret; ret = send(cmd_fd, cmd, (int)strlen(cmd),0); if (ret < 0) { - pthread_mutex_unlock(&mutex); return -1; } - pthread_mutex_unlock(&mutex); return 0; } int RecvRespond(char * respond,int len,int cmd_fd) { - pthread_mutex_lock(&mutex); - int ret; - int off; - len -= -1; - for (off = 0;off < len;off += ret) { - ret = recv(cmd_fd,&respond[off],1,0); - if(ret < 0 ){ - printf("recv respond error\r\n"); - return -1; - } - if(respond[off] == '\n'){ + read(cmd_fd,respond,50); + for(int i=0;i<50;i++){ + if(respond[i]=='\n'){ + respond[i+1]=0; break; } - } - respond[off + 1] = 0; + } char *result = malloc(50); strcpy(result,respond); - pthread_mutex_unlock(&mutex); return atoi(result); } int EnterPasv(uint8_t *ipaddr,int *port,int cmd_fd) @@ -100,10 +87,8 @@ int EnterPasv(uint8_t *ipaddr,int *port,int cmd_fd) printf("failed to enter pasv mod\n"); pthread_mutex_unlock(&mutex); } - pthread_mutex_lock(&mutex); find=strrchr(recvBuffer,'('); sscanf(find,"(%d,%d,%d,%d,%d,%d)",&ipaddr[0],&ipaddr[1],&ipaddr[2],&ipaddr[3],&tmp1,&tmp2); - pthread_mutex_unlock(&mutex); *port = tmp1 * 256 + tmp2; free(sendBuffer); free(recvBuffer); @@ -142,7 +127,9 @@ int Login(uint8_t addr[4],int port,char *username,char *password,int cmd_fd) free(recvBuffer); return -1; } + pthread_mutex_lock(&mutex); printf("login....\r\n"); + pthread_mutex_unlock(&mutex); sprintf(sendBuffer,"USER %s\r\n",username); ret = SendCommand(sendBuffer,cmd_fd); @@ -161,9 +148,7 @@ int Login(uint8_t addr[4],int port,char *username,char *password,int cmd_fd) return -1; } - pthread_mutex_lock(&mutex); sprintf(sendBuffer,"PASS %s\r\n",password); - pthread_mutex_unlock(&mutex); ret = SendCommand(sendBuffer,cmd_fd); if(ret == -1){ pthread_mutex_lock(&mutex); @@ -213,9 +198,7 @@ int GetFileSize(char * name,int cmd_fd) int ret; int size; - pthread_mutex_lock(&mutex); sprintf(sendBuffer,"SIZE %s\r\n",name); - pthread_mutex_unlock(&mutex); ret = SendCommand(sendBuffer,cmd_fd); if(ret == -1){ pthread_mutex_lock(&mutex); @@ -241,6 +224,7 @@ int GetFileSize(char * name,int cmd_fd) } int Download(char *name,int cmd_fd) { + char *buf = malloc(5000*sizeof(char)); char *sendBuffer = malloc(1024*sizeof(char)); char *recvBuffer = malloc(1024*sizeof(char)); int data_fd = socket(AF_INET, SOCK_STREAM, 0); @@ -257,6 +241,7 @@ int Download(char *name,int cmd_fd) closesocket(data_fd); free(sendBuffer); free(recvBuffer); + free(buf); return -1; } struct sockaddr_in tcp_sock; @@ -271,6 +256,7 @@ int Download(char *name,int cmd_fd) pthread_mutex_unlock(&mutex); free(sendBuffer); free(recvBuffer); + free(buf); return -1; } @@ -280,6 +266,7 @@ int Download(char *name,int cmd_fd) closesocket(data_fd); free(sendBuffer); free(recvBuffer); + free(buf); return -1; } ret = RecvRespond(recvBuffer,1024,cmd_fd); @@ -287,12 +274,11 @@ int Download(char *name,int cmd_fd) closesocket(data_fd); free(sendBuffer); free(recvBuffer); + free(buf); return -1; } for(it = 0;it < len;it += ret){ - pthread_mutex_lock(&mutex); ret = recv(data_fd,((char *)buf + it),len,0); - pthread_mutex_unlock(&mutex); if(ret<0){ pthread_mutex_lock(&mutex); printf("download was interupted\r\n"); @@ -300,7 +286,6 @@ int Download(char *name,int cmd_fd) break; } } - //buf[len] = 0; pthread_mutex_lock(&mutex); printf("download %d/%d bytes complete. \r\n",it,len); pthread_mutex_unlock(&mutex); @@ -309,32 +294,33 @@ int Download(char *name,int cmd_fd) closesocket(data_fd); free(sendBuffer); free(recvBuffer); + free(buf); return -1; } closesocket(data_fd); pthread_mutex_lock(&mutex); - printf("creating file %s ....\r\n",name); + printf("creating %s ....\r\n",name); pthread_mutex_unlock(&mutex); FILE * file = fopen(name,"w"); - pthread_mutex_lock(&mutex); fprintf(file,buf); - pthread_mutex_unlock(&mutex); fclose(file); pthread_mutex_lock(&mutex); - printf("create success!"); + printf("create %s success!\n",name); pthread_mutex_unlock(&mutex); free(sendBuffer); free(recvBuffer); + free(buf); return 0; } int Upload(char* name,int cmd_fd) { char *sendBuffer = malloc(1024*sizeof(char)); char *recvBuffer = malloc(1024*sizeof(char)); + char *buf = malloc(5000*sizeof(char)); int data_fd = socket(AF_INET, SOCK_STREAM, 0); pthread_mutex_lock(&mutex); - printf("uploading file %s\r\n", name); + printf("uploading %s\r\n", name); pthread_mutex_unlock(&mutex); int ret; uint8_t addr[4]; @@ -344,6 +330,7 @@ int Upload(char* name,int cmd_fd) closesocket(data_fd); free(sendBuffer); free(recvBuffer); + free(buf); return -1; } struct sockaddr_in tcp_sock; @@ -358,17 +345,17 @@ int Upload(char* name,int cmd_fd) pthread_mutex_unlock(&mutex); free(sendBuffer); free(recvBuffer); + free(buf); return -1; } - pthread_mutex_lock(&mutex); sprintf(sendBuffer, "STOR %s\r\n", name); - pthread_mutex_unlock(&mutex); ret = SendCommand(sendBuffer,cmd_fd); if(ret == -1){ closesocket(data_fd); free(sendBuffer); free(recvBuffer); + free(buf); return -1; } ret = RecvRespond(recvBuffer,1024,cmd_fd); @@ -376,6 +363,7 @@ int Upload(char* name,int cmd_fd) closesocket(data_fd); free(sendBuffer); free(recvBuffer); + free(buf); return -1; } @@ -386,42 +374,43 @@ int Upload(char* name,int cmd_fd) pthread_mutex_unlock(&mutex); free(sendBuffer); free(recvBuffer); + free(buf); return -1; } fseek(file,0,SEEK_END); int len = ftell(file); fseek(file,0,SEEK_SET); - - pthread_mutex_lock(&mutex); int size = fread(buf, 1, len, file); - pthread_mutex_unlock(&mutex); - if (size == -1) { pthread_mutex_lock(&mutex); printf("failed to read data\n"); pthread_mutex_unlock(&mutex); free(sendBuffer); free(recvBuffer); + free(buf); return -1; } fclose(file); pthread_mutex_lock(&mutex); - ret = send(data_fd, buf, len,0); + ret = send(data_fd, buf, size,0); pthread_mutex_unlock(&mutex); closesocket(data_fd); ret = RecvRespond(recvBuffer, 1024,cmd_fd); + if (ret != 226) { free(sendBuffer); free(recvBuffer); + free(buf); return -1; } pthread_mutex_lock(&mutex); - printf("upload success!\n"); + printf("upload %s success!\n",name); pthread_mutex_unlock(&mutex); free(sendBuffer); free(recvBuffer); + free(buf); return 0; } @@ -512,6 +501,7 @@ PRIV_SHELL_CMD_FUNCTION(UploadTest, Implement ftp, PRIV_SHELL_CMD_MAIN_ATTR); int TestFtp() { + pthread_mutex_init(&mutex,NULL); lwip_config_tcp(0, tcp_demo_ipaddr, tcp_demo_netmask, tcp_demo_gwaddr); int cmd_fd = socket(AF_INET, SOCK_STREAM, 0); uint8_t ip[4] = { 8,140,53,225 };