From 5039ebc85faf80a73891a1572fa71963906613c8 Mon Sep 17 00:00:00 2001 From: yanglong <2464416786@qq.com> Date: Sun, 8 Oct 2023 18:53:59 +0800 Subject: [PATCH] add ftp_server code --- .../app_test/test_ftpclient_final/README.md | 2 +- .../test_ftpclient_final/ftp_server/a.out | Bin 0 -> 16696 bytes .../ftp_server/data/file1 | Bin 0 -> 4096 bytes .../ftp_server/data/file10 | Bin 0 -> 4096 bytes .../ftp_server/data/file2 | Bin 0 -> 4096 bytes .../ftp_server/data/file3 | Bin 0 -> 4096 bytes .../ftp_server/data/file4 | Bin 0 -> 4096 bytes .../ftp_server/data/file5 | Bin 0 -> 4096 bytes .../ftp_server/data/file6 | Bin 0 -> 4096 bytes .../ftp_server/data/file7 | Bin 0 -> 4096 bytes .../ftp_server/data/file8 | Bin 0 -> 4096 bytes .../ftp_server/data/file9 | Bin 0 -> 4096 bytes .../ftp_server/data/gen.sh | 5 + .../test_ftpclient_final/ftp_server/out/file0 | Bin 0 -> 4096 bytes .../test_ftpclient_final/ftp_server/out/file1 | Bin 0 -> 4096 bytes .../test_ftpclient_final/ftp_server/out/file2 | 1 + .../test_ftpclient_final/ftp_server/out/file3 | Bin 0 -> 4096 bytes .../test_ftpclient_final/ftp_server/out/file4 | Bin 0 -> 4096 bytes .../test_ftpclient_final/ftp_server/out/file5 | Bin 0 -> 4096 bytes .../test_ftpclient_final/ftp_server/out/file6 | Bin 0 -> 4096 bytes .../test_ftpclient_final/ftp_server/out/file7 | Bin 0 -> 4096 bytes .../test_ftpclient_final/ftp_server/out/file8 | Bin 0 -> 4096 bytes .../test_ftpclient_final/ftp_server/out/file9 | Bin 0 -> 4096 bytes .../test_ftpclient_final/ftp_server/server | Bin 0 -> 22280 bytes .../test_ftpclient_final/ftp_server/server.c | 210 ++++++++++++++++++ .../test_ftpclient_final/ftp_server/test.c | 6 + 26 files changed, 223 insertions(+), 1 deletion(-) create mode 100755 APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/a.out create mode 100644 APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/data/file1 create mode 100644 APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/data/file10 create mode 100644 APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/data/file2 create mode 100644 APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/data/file3 create mode 100644 APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/data/file4 create mode 100644 APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/data/file5 create mode 100644 APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/data/file6 create mode 100644 APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/data/file7 create mode 100644 APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/data/file8 create mode 100644 APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/data/file9 create mode 100644 APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/data/gen.sh create mode 100644 APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/out/file0 create mode 100644 APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/out/file1 create mode 100644 APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/out/file2 create mode 100644 APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/out/file3 create mode 100644 APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/out/file4 create mode 100644 APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/out/file5 create mode 100644 APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/out/file6 create mode 100644 APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/out/file7 create mode 100644 APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/out/file8 create mode 100644 APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/out/file9 create mode 100755 APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/server create mode 100644 APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/server.c create mode 100644 APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/test.c diff --git a/APP_Framework/Applications/app_test/test_ftpclient_final/README.md b/APP_Framework/Applications/app_test/test_ftpclient_final/README.md index 92d2096d6..f37ec7a77 100644 --- a/APP_Framework/Applications/app_test/test_ftpclient_final/README.md +++ b/APP_Framework/Applications/app_test/test_ftpclient_final/README.md @@ -7,7 +7,7 @@ test_ftpclient_final.h声明了多个客户端并发下载文件、并发上传 test_ftpclient_final.c实现了多个客户端并发下载文件、并发上传文件的测试函数 ftp_client文件夹定义了ftp_client的相关类库其中my_socket.h,my_socket.c定义了socket抽象层,并基于 Lwip实现了该抽象层,ftp_client.h,ftp_client.c实现了ftp登录,获取文件大小,下载文件等功能 -注意:在赛事提供的云服务器/root/yanglongFTP上有对应服务器代码 ./server运行服务器 +注意:在赛事提供的云服务器/root/yanglongFTP上有对应服务器代码 ./server运行服务器,为了方便查看代码我们讲服务器代码备份存放在ftp_server目录下 ## 2. 数据结构设计说明 - ftp_client.c 的设计 分别定义了发送命令和接收数据的socket和相应的缓冲区并且实现了登录、发送命令、接收响应数据、查找文件大小、进入被动模式、下载文件、关闭ftp客户端等操作 diff --git a/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/a.out b/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/a.out new file mode 100755 index 0000000000000000000000000000000000000000..7e9454464e4df60b96676b2f6e023767637ec9ae GIT binary patch literal 16696 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 a1gX;Hoa?npam?*)f2_^Y*yu8FiQ?a-);?PR literal 0 HcmV?d00001 diff --git a/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/data/file1 b/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/data/file1 new file mode 100644 index 0000000000000000000000000000000000000000..08e7df176454f3ee5eeda13efa0adaa54828dfd8 GIT binary patch literal 4096 ocmeIu0Sy2E0K%a6Pi+qe5hx58Fkrxd0RsjM7%*VKfPwdc0T2KH0RR91 literal 0 HcmV?d00001 diff --git a/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/data/file10 b/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/data/file10 new file mode 100644 index 0000000000000000000000000000000000000000..08e7df176454f3ee5eeda13efa0adaa54828dfd8 GIT binary patch literal 4096 ocmeIu0Sy2E0K%a6Pi+qe5hx58Fkrxd0RsjM7%*VKfPwdc0T2KH0RR91 literal 0 HcmV?d00001 diff --git a/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/data/file2 b/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/data/file2 new file mode 100644 index 0000000000000000000000000000000000000000..08e7df176454f3ee5eeda13efa0adaa54828dfd8 GIT binary patch literal 4096 ocmeIu0Sy2E0K%a6Pi+qe5hx58Fkrxd0RsjM7%*VKfPwdc0T2KH0RR91 literal 0 HcmV?d00001 diff --git a/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/data/file3 b/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/data/file3 new file mode 100644 index 0000000000000000000000000000000000000000..08e7df176454f3ee5eeda13efa0adaa54828dfd8 GIT binary patch literal 4096 ocmeIu0Sy2E0K%a6Pi+qe5hx58Fkrxd0RsjM7%*VKfPwdc0T2KH0RR91 literal 0 HcmV?d00001 diff --git a/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/data/file4 b/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/data/file4 new file mode 100644 index 0000000000000000000000000000000000000000..08e7df176454f3ee5eeda13efa0adaa54828dfd8 GIT binary patch literal 4096 ocmeIu0Sy2E0K%a6Pi+qe5hx58Fkrxd0RsjM7%*VKfPwdc0T2KH0RR91 literal 0 HcmV?d00001 diff --git a/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/data/file5 b/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/data/file5 new file mode 100644 index 0000000000000000000000000000000000000000..08e7df176454f3ee5eeda13efa0adaa54828dfd8 GIT binary patch literal 4096 ocmeIu0Sy2E0K%a6Pi+qe5hx58Fkrxd0RsjM7%*VKfPwdc0T2KH0RR91 literal 0 HcmV?d00001 diff --git a/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/data/file6 b/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/data/file6 new file mode 100644 index 0000000000000000000000000000000000000000..08e7df176454f3ee5eeda13efa0adaa54828dfd8 GIT binary patch literal 4096 ocmeIu0Sy2E0K%a6Pi+qe5hx58Fkrxd0RsjM7%*VKfPwdc0T2KH0RR91 literal 0 HcmV?d00001 diff --git a/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/data/file7 b/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/data/file7 new file mode 100644 index 0000000000000000000000000000000000000000..08e7df176454f3ee5eeda13efa0adaa54828dfd8 GIT binary patch literal 4096 ocmeIu0Sy2E0K%a6Pi+qe5hx58Fkrxd0RsjM7%*VKfPwdc0T2KH0RR91 literal 0 HcmV?d00001 diff --git a/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/data/file8 b/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/data/file8 new file mode 100644 index 0000000000000000000000000000000000000000..08e7df176454f3ee5eeda13efa0adaa54828dfd8 GIT binary patch literal 4096 ocmeIu0Sy2E0K%a6Pi+qe5hx58Fkrxd0RsjM7%*VKfPwdc0T2KH0RR91 literal 0 HcmV?d00001 diff --git a/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/data/file9 b/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/data/file9 new file mode 100644 index 0000000000000000000000000000000000000000..08e7df176454f3ee5eeda13efa0adaa54828dfd8 GIT binary patch literal 4096 ocmeIu0Sy2E0K%a6Pi+qe5hx58Fkrxd0RsjM7%*VKfPwdc0T2KH0RR91 literal 0 HcmV?d00001 diff --git a/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/data/gen.sh b/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/data/gen.sh new file mode 100644 index 000000000..7382342b3 --- /dev/null +++ b/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/data/gen.sh @@ -0,0 +1,5 @@ +#!/bin/bash +for i in {1..10} +do + dd if=/dev/zero of="file$i" bs=4K count=1 +done diff --git a/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/out/file0 b/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/out/file0 new file mode 100644 index 0000000000000000000000000000000000000000..8486a6b137cf0174ed9b9060c6e4e95a7f6cf3d6 GIT binary patch literal 4096 scmeIuF#!Mo3<97b*1`HT5&>lDp7%(t4@b)Pqp8x;= literal 0 HcmV?d00001 diff --git a/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/out/file1 b/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/out/file1 new file mode 100644 index 0000000000000000000000000000000000000000..b70b444a133cbb8726837d52774e136080fd6c64 GIT binary patch literal 4096 tcmeIuF%19!3YwAz<_~~fd}!O0?+^e literal 0 HcmV?d00001 diff --git a/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/out/file2 b/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/out/file2 new file mode 100644 index 000000000..a18027c49 --- /dev/null +++ b/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/out/file2 @@ -0,0 +1 @@ +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/out/file3 b/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/out/file3 new file mode 100644 index 0000000000000000000000000000000000000000..b70b444a133cbb8726837d52774e136080fd6c64 GIT binary patch literal 4096 tcmeIuF%19!3YwAz<_~~fd}!O0?+^e literal 0 HcmV?d00001 diff --git a/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/out/file4 b/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/out/file4 new file mode 100644 index 0000000000000000000000000000000000000000..b70b444a133cbb8726837d52774e136080fd6c64 GIT binary patch literal 4096 tcmeIuF%19!3YwAz<_~~fd}!O0?+^e literal 0 HcmV?d00001 diff --git a/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/out/file5 b/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/out/file5 new file mode 100644 index 0000000000000000000000000000000000000000..b70b444a133cbb8726837d52774e136080fd6c64 GIT binary patch literal 4096 tcmeIuF%19!3YwAz<_~~fd}!O0?+^e literal 0 HcmV?d00001 diff --git a/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/out/file6 b/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/out/file6 new file mode 100644 index 0000000000000000000000000000000000000000..b70b444a133cbb8726837d52774e136080fd6c64 GIT binary patch literal 4096 tcmeIuF%19!3YwAz<_~~fd}!O0?+^e literal 0 HcmV?d00001 diff --git a/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/out/file7 b/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/out/file7 new file mode 100644 index 0000000000000000000000000000000000000000..b70b444a133cbb8726837d52774e136080fd6c64 GIT binary patch literal 4096 tcmeIuF%19!3YwAz<_~~fd}!O0?+^e literal 0 HcmV?d00001 diff --git a/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/out/file8 b/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/out/file8 new file mode 100644 index 0000000000000000000000000000000000000000..b70b444a133cbb8726837d52774e136080fd6c64 GIT binary patch literal 4096 tcmeIuF%19!3YwAz<_~~fd}!O0?+^e literal 0 HcmV?d00001 diff --git a/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/out/file9 b/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/out/file9 new file mode 100644 index 0000000000000000000000000000000000000000..6fc16fe2caf4b9a3c6ad52e94a77b8f8dc8095fb GIT binary patch literal 4096 ocmeIufeZiu00OX(@~6wA{RnR{V8DO@0|pEjFkm1UFks+(V5)!=p8x;= literal 0 HcmV?d00001 diff --git a/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/server b/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/server new file mode 100755 index 0000000000000000000000000000000000000000..5a76806a48a42d2852c17df22d22c848d2a55096 GIT binary patch literal 22280 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 literal 0 HcmV?d00001 diff --git a/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/server.c b/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/server.c new file mode 100644 index 000000000..154f0e5d8 --- /dev/null +++ b/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/server.c @@ -0,0 +1,210 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#define THREAD_NUM 10 +static int isBinary = 0; // transmit binary data +static int port = 9992; // service port +static int dataPort = 9993; // the port for file download +static char order[4]; // receive order +static char param[20]; // receive order param +static char *respMessage; // respose message +static int serverFd; // the server fd for deal with order requests +static int dataServerFd; // the server fd for file download +struct Data{ + sem_t isReady; + sem_t isDone; + char fileName[20]; +}; + +void RecvData(int clientFd,char param[20]){ + recv(clientFd,param,20,0); + for(int i = 0;i < 20;++i){ + if(param[i] == '\r'){ + param[i] = '\0'; + return; + } + } + return; +} + +void SendMessage(int clientFd, char * respMessage){ + int len = 0; + while(respMessage[len] != '\n'){ + len++; + } + send(clientFd,respMessage,len+1,0); +} + +int CreateServer(int port) { + int serverFd = 0; + struct sockaddr_in serverAddr = {0}; + socklen_t socklen = 0; + serverFd = socket(AF_INET, SOCK_STREAM, 0); + if(0 > serverFd) + { + printf("创建socket失败\n"); + return 0; + } + printf("in server:serverFd=%d\n",serverFd); + serverAddr.sin_family = AF_INET; + serverAddr.sin_port = htons(port); + serverAddr.sin_addr.s_addr=htonl(INADDR_ANY); + if(0 > bind(serverFd, (void *)&serverAddr, sizeof(serverAddr))) + { + printf("绑定失败!\n"); + return 0; + } + if(0 > listen(serverFd, 1024)) + { + printf("监听失败!\n"); + return 0; + } + return serverFd; +} + +// accept a client and receive file's data +void* UpLoadServer(void * args){ + struct Data* pData = (struct Data *) args; + struct sockaddr_in clientAdrr = {0}; + int socketLen = sizeof(clientAdrr); + int clientFd = accept(dataServerFd,(struct sockaddr *)&clientAdrr,&socketLen); + printf("accept a client for file upload: clientFd=%d,tid=%ld\n",clientFd,pthread_self()); + char data[4096]; + int ret = recv(clientFd,data,4096,0); + printf("ret=%d,errno=%d\n",ret,errno); + FILE * file = fopen(pData->fileName,"wb"); // fileName需要线程间通信 + fwrite(data,4096,1,file); + fclose(file); + printf("upload complete for client: clientFd=%d,tid=%ld\n",clientFd,pthread_self()); + sem_post(&pData->isDone); + close(clientFd); +} + +// accept a client and send file's data +void* DownLoadServer(void * args){ + struct Data* pData = (struct Data *) args; + struct sockaddr_in clientAdrr = {0}; + int socketLen = sizeof(clientAdrr); + int clientFd = accept(dataServerFd,(struct sockaddr *)&clientAdrr,&socketLen); + printf("accept a client for file download: clientFd=%d,tid=%ld\n",clientFd,pthread_self()); + + // wait for fileName ready + printf("wait for fileName ready,tid=%ld\n",pthread_self()); + sem_wait(&pData->isReady); + char data[4096]; + FILE * file = fopen(pData->fileName,"rb"); // fileName需要线程间通信 + fread(data,4096,1,file); + send(clientFd,data,sizeof(data),0); + fclose(file); + printf("download complete for client: clientFd=%d,tid=%ld\n",clientFd,pthread_self()); + sem_post(&pData->isDone); + close(clientFd); +} + +// deal with order requests +void* OrderServer(void * args){ + int clientFd = *(int *)args; + struct Data data; + printf("in OrderServer thread: tid=%ld\n",pthread_self()); + // order format: USER anonymous\r\n + // response code format: 213 4096\r\n + while(1){ + recv(clientFd,order,4,0); + printf("order=%s,tid=%ld\n",order,pthread_self()); + if(strcmp(order,"USER") == 0){ + RecvData(clientFd,param); + if(strcmp(param," anonymous") == 0){ + respMessage = "331 Please specify the password.\r\n"; + SendMessage(clientFd,respMessage); + } + }else if(strcmp(order,"PASS") == 0){ + RecvData(clientFd,param); + if(strcmp(param," anonymous") == 0){ + respMessage = "230 Login successful.\r\n"; + SendMessage(clientFd,respMessage); + printf("login successful in clientFd %d,tid=%ld\n",clientFd,pthread_self()); + } + }else if(strcmp(order,"TYPE") == 0){ + RecvData(clientFd,param); + if(strcmp(param," I") == 0){ + isBinary = 1; + respMessage = "200 Switching to Binary mode.\r\n"; + SendMessage(clientFd,respMessage); + } + }else if(strcmp(order,"SIZE") == 0){ + RecvData(clientFd,param); + respMessage = "213 4096\r\n"; + SendMessage(clientFd,respMessage); + }else if(strcmp(order,"PASV") == 0){ + sem_init(&data.isReady,0,0); + sem_init(&data.isDone,0,0); + RecvData(clientFd,param); + char buf[50]; + sprintf(buf,"227 Entering passive mode (8,140,53,225,%d,%d).\r\n",dataPort/256,dataPort%256); + respMessage = buf; + SendMessage(clientFd,respMessage); + }else if(strcmp(order,"RETR") == 0){ + RecvData(clientFd,param); + sprintf(data.fileName,"./data/%s",param+2); + pthread_t thread; + pthread_create(&thread,NULL,&DownLoadServer,&data); + // notify the thread of waiting fileName + sem_post(&data.isReady); + char buf[70]; + sprintf(buf,"150 Opening Binary mode data connection for %s (4096 bytes).\r\n",param+1); + respMessage = buf; + SendMessage(clientFd,respMessage); + // wait for download complete + printf("wait for download complete,tid=%ld\n",pthread_self()); + sem_wait(&data.isDone); + respMessage = "226 Transfer complete.\r\n"; + SendMessage(clientFd,respMessage); + }else if(strcmp(order,"STOR") == 0){ + RecvData(clientFd,param); + sprintf(data.fileName,"./out/%s",param+1); + pthread_t thread; + pthread_create(&thread,NULL,&UpLoadServer,&data); + char buf[70]; + sprintf(buf,"150 Opening Binary mode data connection for %s (4096 bytes).\r\n",param+1); + respMessage = buf; + SendMessage(clientFd,respMessage); + // wait for upload complete + printf("wait for upload complete,tid=%ld\n",pthread_self()); + sem_wait(&data.isDone); + respMessage = "226 Transfer complete.\r\n"; + SendMessage(clientFd,respMessage); + } + else if(strcmp(order,"QUIT") == 0){ + printf("close clientFd=%d,tid=%ld\n",clientFd,pthread_self()); + close(clientFd); + break; + } + } + return NULL; +} + +int main(){ + serverFd = CreateServer(port); + dataServerFd = CreateServer(dataPort); + int clientFds[THREAD_NUM]; + int i = 0; + while(1){ + struct sockaddr_in clientAdrr = {0}; + int socketLen = sizeof(clientAdrr); + clientFds[i] = accept(serverFd,(struct sockaddr *)&clientAdrr,&socketLen); + printf("accept a client:fd=%d\n",clientFds[i]); + respMessage = "220 (myFtpServer 1.0)\r\n"; + SendMessage(clientFds[i],respMessage); + printf("send successful.\n"); + pthread_t thread; + pthread_create(&thread,NULL,&OrderServer,&clientFds[i]); + i++; + } + return 0; +} diff --git a/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/test.c b/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/test.c new file mode 100644 index 000000000..2ef2d11a0 --- /dev/null +++ b/APP_Framework/Applications/app_test/test_ftpclient_final/ftp_server/test.c @@ -0,0 +1,6 @@ +#include + +int main(){ + char* t = "123456789\r\n"; + printf("%ld:%s",sizeof(t),t); +} \ No newline at end of file