文件传输协议的简单设计与实现(c语言._c语言简单的ftp
文件传输协议的简单设计与实现(c语言.由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“c语言简单的ftp”。
文件传输协议的简单设计与实现(c语言,VC6.0)使用Socket进行Client/Server程序设计的一般连接过程是这样的:Server端Listen(监听)某个端口是否有连接请求,Client端向Server端发出Connect(连接)请求,Server端向Client端发回Accept(接受)消息。一个连接就建立起来了。Server端和Client端都可以通过Send,Write等方法与对方通信。
对于一个功能齐全的Socket,都要包含以下基本结构,其工作过程包含以下四个基本的步骤:
(1)创建Socket;
(2)打开连接到Socket的输入/出流;
(3)按照一定的协议对Socket进行读/写操作;
(4)关闭Socket.第三步是程序员用来调用Socket和实现程序功能的关键步骤,其他三步在各种程序中基本相同。
/****************client.c****************/ #include #include #include #pragma comment(lib,“ws2_32.lib”)#define DEFAULT_PORT 2302 #define DEFAULT_BUFFER 2048 #define DEFAULT_MESSAGE “This is a test of the emergency broadcasting system” char szServerip[128], // Server to connect to szMeage[1024];// Meage to send to sever int iPort = DEFAULT_PORT;// Port on server to connect to
//DWORD dwCount = DEFAULT_COUNT;// Number of times to send meage BOOL bSendOnly = FALSE;// Send data only;don't receive int dirfun();int getfun();int putfun();int pwdfun();int cdfun();int mdfun();int delfun();int usafun();
void usage(){ printf(“usage: client [-p:x] [-s:IP] [-n:x] [-o]nn”);printf(“-p:x Remote port to send ton”);printf(“-s:IP Server's IP addre or hostnamen”);printf(“-n:x Number of times to send meagen”);printf(“-o Send meages only;don't receiven”);ExitProce(1);} void ValidateArgs(int argc, char **argv){ int i;
for(i = 1;i
if(strlen(argv[i])> 3)iPort = atoi(&argv[i][3]);break;case 's': // Server
if(strlen(argv[i])> 3)strcpy(szServerip, &argv[i][3]);break;case 'n': // Number of times to send meage
if(strlen(argv[i])> 3)//dwCount = atol(&argv[i][3]);
break;case 'o': // Only send meage;don't receive
bSendOnly = TRUE;break;default: usage();break;} } } } int main(int argc, char **argv){ WSADATA wsd;SOCKET sClient;char szBuffer[DEFAULT_BUFFER];int ret;//unsigned int i;
//int j;
struct sockaddr_in server;struct hostent *host = NULL;char choice[5],choice2[40];// Parse the command line and load Winsock
//
argv[1]=“-s:127.0.0.1”;strcpy(szServerip, &argv[1][3]);//ValidateArgs(argc, argv);if(WSAStartup(MAKEWORD(2,2), &wsd)!= 0){ printf(“Failed to load Winsock library!n”);return 1;} //strcpy(szMeage, DEFAULT_MESSAGE);
//
// Create the socket, and attempt to connect to the server
//
sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if(sClient == INVALID_SOCKET){ printf(“socket()failed: %dn”, WSAGetLastError());return 1;} server.sin_family = AF_INET;server.sin_port = htons(iPort);printf(“server.sin_port=%un”,server.sin_port);server.sin_addr.s_addr = inet_addr(szServerip);//
// If the supplied server addre wasn't in the form
// “aaa.bbb.ccc.ddd” it's a hostname, so try to resolve it
//
if(server.sin_addr.s_addr == INADDR_NONE){ host = gethostbyname(szServerip);if(host == NULL){ printf(“Unable to resolve server: %sn”, szServerip);return 1;} CopyMemory(&server.sin_addr, host->h_addr_list[0], host->h_length);} if(connect(sClient,(struct sockaddr *)&server, sizeof(server))== SOCKET_ERROR){ printf(“connect()failed: %dn”, WSAGetLastError());return 1;} //显示接通信息
//
//
//for(j=0;j
//
{
ret = recv(sClient, szBuffer, DEFAULT_BUFFER, 0);if(ret == 0)// Graceful close
return 0;else if(ret == SOCKET_ERROR){ printf(“recv()failed: %dn”, WSAGetLastError());return 0;} szBuffer[ret] = ' ';printf(“%sn”,szBuffer);if(ret
return 0;} szBuffer[ret] = ' ';printf(“%sn”,szBuffer);} //printf(“DEFAULT_BUFFER=%dn”,DEFAULT_BUFFER);
} while(1){
puts(“-----------”);printf(“ftp> ”);scanf(“%s”, choice);
if(strncmp(choice,“dir”,3)==0||strncmp(choice,“DIR”,2)==0){ dirfun(sClient);continue;}
else if(strncmp(choice,“pwd”,3)==0||strncmp(choice,“PWD”,3)==0){
pwdfun(sClient);continue;} else if(strncmp(choice,“?”,1)==0){ usafun(sClient);continue;} else if(strncmp(choice,“quit”,4)==0||strncmp(choice,“QUIT”,2)==0){ break;} scanf(“%s”, choice2);if(strncmp(choice,“get”,3)==0||strncmp(choice,“GET”,3)==0){ getfun(sClient,choice2);continue;} else if(strncmp(choice,“put”,3)==0||strncmp(choice,“PUT”,3)==0){ putfun(sClient,choice2);continue;}
else if(strncmp(choice,“cd”,2)==0||strncmp(choice,“CD”,2)==0){ cdfun(sClient,choice2);continue;} else if(strncmp(choice,“md”,2)==0||strncmp(choice,“MD”,2)==0){ mdfun(sClient,choice2);continue;} else if(strncmp(choice,“del”,3)==0||strncmp(choice,“DEL”,3)==0){ delfun(sClient,choice2);continue;}
//else
puts(“输入错误,请重新输入”);fflush(stdin);fflush(stdin);printf(“n”);
printf(“n”);}
closesocket(sClient);
WSACleanup();return 0;} int dirfun(SOCKET sClient){ int ret;char *MSG=“dir$”;char szBuffer[80];strcpy(szMeage, MSG);
ret = send(sClient, szMeage, strlen(szMeage), 0);if(ret == 0)return 1;else if(ret == SOCKET_ERROR){ printf(“send()failed: %dn”, WSAGetLastError());return 1;} //printf(“Send %d bytesn”, ret);//printf(“bSendOnly=%dn”,bSendOnly);
while(!bSendOnly){ //读取流并显示
//ret = recv(sClient, szBuffer, 80, 0);
//printf(“%s”,szBuffer);
ret = recv(sClient, szBuffer, 80, 0);if(ret == 0)// Graceful close
return 1;else if(ret == SOCKET_ERROR){ printf(“recv()failed: %dn”, WSAGetLastError());return 1;} szBuffer[ret] = ' ';
if(strncmp(szBuffer,“226 Close”,strlen(“226 Close”))==0){ break;} printf(“%s”,szBuffer);if(strncmp(szBuffer,“500 Syntax error”,strlen(“500 Syntax error”))==0){ break;}
} return 0;} int getfun(SOCKET sClient,char filename[40]){ int ret;FILE *fpre;char szBuffer[80];
szMeage[0]=' ';strcat(szMeage, “get$”);//strcat(szMeage, “”);
strcat(szMeage,filename);//printf(“MSG[4]=%cn”,szMeage[4]);
//szMeage[0]='g';szMeage[1]='e';szMeage[2]='t';
//
//szMeage[4]='m';szMeage[5]='e';szMeage[6]='.';szMeage[7]='t';
//
//szMeage[8]='x';szMeage[9]='t';szMeage[10]=' ';
ret = send(sClient, szMeage, strlen(szMeage)+1, 0);if(ret == 0)return 1;else if(ret == SOCKET_ERROR){ printf(“send()failed: %dn”, WSAGetLastError());return 1;} printf(“Send %d bytesn”, ret);ret = recv(sClient, szBuffer, 80, 0);/*if(ret == 0)// Graceful close break;
else if(ret == SOCKET_ERROR)
{
printf(“recv()failed: %dn”, WSAGetLastError());
break;
}*/
szBuffer[ret] = ' ';printf(“%sn”,szBuffer);if(strncmp(szBuffer,“125 Transfering...”,strlen(“125 Transfering...”))==0){ if((fpre=fopen(filename,“w”))== NULL){ printf(“open errer”);return 1;} printf(“bSendOnly=%dn”,bSendOnly);while(!bSendOnly){ //读取流并显示
ret = recv(sClient, szBuffer, 80, 0);if(ret == 0)// Graceful close
return 1;else if(ret == SOCKET_ERROR){ printf(“recv()failed: %dn”, WSAGetLastError());return 1;} szBuffer[ret] = ' ';
//printf(“%s”,szBuffer);
if(strncmp(szBuffer,“226 Transfer”,strlen(“226 Transfer”))==0){ break;} if(strncmp(szBuffer,“500 Syntax error”,strlen(“500 Syntax error”))==0){ break;} fprintf(fpre,“%s”,szBuffer);} printf(“%sn”,szBuffer);fclose(fpre);} return 0;} int putfun(SOCKET sClient,char filename[40]){ int ret;//int i;
FILE *fpse;//char *filename;
//char *MSG=“get me.txt”;
char szBuffer[80],temp_buffer[80];//sprintf(szMeage, “get ”,“te.txt ”);
szMeage[0]=' ';strcat(szMeage, “put$”);strcat(szMeage,filename);ret = send(sClient, szMeage, strlen(szMeage)+1, 0);if(ret == 0)return 0;else if(ret == SOCKET_ERROR){ printf(“send()failed: %dn”, WSAGetLastError());return 1;} //printf(“Send %d bytesn”, ret);
//filename=“me.txt”;
printf(“filename=%sn”,filename);if((fpse=fopen(filename,“r”))== NULL){ printf(“open errer”);return 1;} else
{ printf(“The file %s found,ready to transfer.n”,filename);//i=0;
while(fgets(temp_buffer,80,fpse)!=NULL){ sprintf(szBuffer,“%s”,temp_buffer);
send(sClient, szBuffer, 80, 0);} } sprintf(szBuffer, “226 Transfer completed...rn”);
ret = send(sClient, szBuffer, strlen(szBuffer), 0);
fclose(fpse);return 0;} int pwdfun(SOCKET sClient){ int ret;char *MSG=“pwd$”;char szBuffer[160];strcpy(szMeage, MSG);ret = send(sClient, szMeage, strlen(szMeage), 0);if(ret == 0)return 1;else if(ret == SOCKET_ERROR){ printf(“send()failed: %dn”, WSAGetLastError());return 1;} printf(“Send %d bytesn”, ret);printf(“bSendOnly=%dn”,bSendOnly);while(!bSendOnly){ //读取流并显示
ret = recv(sClient, szBuffer, 160, 0);if(ret == 0)// Graceful close
return 1;else if(ret == SOCKET_ERROR){ printf(“recv()failed: %dn”, WSAGetLastError());return 1;} szBuffer[ret] = ' ';printf(“%sn”,szBuffer);if(strncmp(szBuffer,“226 Close”,strlen(“226 Close”))==0){ break;} if(strncmp(szBuffer,“500 Syntax error”,strlen(“500 Syntax error”))==0){ break;} } return 0;} int cdfun(SOCKET sClient,char pathname[40]){ int ret;
szMeage[0]=' ';strcat(szMeage, “cd$”);strcat(szMeage,pathname);ret = send(sClient, szMeage, strlen(szMeage)+1, 0);if(ret == 0)return 1;else if(ret == SOCKET_ERROR){ printf(“send()failed: %dn”, WSAGetLastError());return 1;} printf(“Send %d bytesn”, ret);
return 0;} int mdfun(SOCKET sClient,char pathname[20]){ int ret;char szBuffer[160];//char *MSG=“md$”;
szMeage[0]=' ';strcat(szMeage, “md$”);//strcat(szMeage, “”);
strcat(szMeage,pathname);//strcpy(szMeage, MSG);
ret = send(sClient, szMeage, strlen(szMeage)+1, 0);if(ret == 0)return 1;else if(ret == SOCKET_ERROR){ printf(“send()failed: %dn”, WSAGetLastError());return 1;} printf(“Send %d bytesn”, ret);while(!bSendOnly){ //读取流并显示
ret = recv(sClient, szBuffer, 80, 0);if(ret == 0)// Graceful close
return 1;else if(ret == SOCKET_ERROR){ printf(“recv()failed: %dn”, WSAGetLastError());return 1;} szBuffer[ret] = ' ';
printf(“%s”,szBuffer);
if(strncmp(szBuffer,“226 Close”,strlen(“226 Close”))==0){ break;} if(strncmp(szBuffer,“500 Syntax error”,strlen(“500 Syntax error”))==0){ break;}
} return 0;} int delfun(SOCKET sClient,char name[20]){ int ret;char szBuffer[80];szMeage[0]=' ';strcat(szMeage, “del$”);
strcat(szMeage,name);ret = send(sClient, szMeage, strlen(szMeage)+1, 0);if(ret == 0)return 1;else if(ret == SOCKET_ERROR){ printf(“send()failed: %dn”, WSAGetLastError());return 1;} printf(“Send %d bytesn”, ret);while(!bSendOnly){ ret = recv(sClient, szBuffer, 80, 0);if(ret == 0)// Graceful close
return 1;else if(ret == SOCKET_ERROR){ printf(“recv()failed: %dn”, WSAGetLastError());return 1;} szBuffer[ret] = ' ';
if(strncmp(szBuffer,“del ok”,strlen(“del ok”))==0){ printf(“del %s okn”,name);break;} printf(“%s”,szBuffer);if(strncmp(szBuffer,“500 Syntax error”,strlen(“500 Syntax error”))==0){ break;}
} return 0;} int usafun(){ puts(“-----------”);puts(“get:取远方的一个文件”);puts(“put:传给远方一个文件”);puts(“pwd:显示远主当前目录”);puts(“dir:列出远方当前目录”);puts(“md :在远方新建文件夹”);puts(“cd :改变远方当前目录”);puts(“? :显示你提供的命令”);puts(“quit :退出返回”);return 0;} //int quit()
/****************server.c****************/ #include #include #include
#pragma comment(lib,“ws2_32.lib”)WSADATA wsd;
char sbuffer[80],rbuffer[80];//send and receive buffers int n,bytes;//counters SOCKET newsocket,ns_data;
struct sockaddr_in remoteaddr;//remoteaddr_data;int port_connect=0;//port connect flag char path[80]=“”;char order[100]=“”;//SOCKET s_data_port;
int sy_error=1;// use for indicate Syntax error //server functions
int sdirfun(SOCKET newsocket);int sgetfun(SOCKET newsocket);int sputfun(SOCKET newsocket);int spwdfun(SOCKET newsocket);int scdfun(SOCKET newsocket);int smdfun(SOCKET newsocket);int sdelfun(SOCKET newsocket);void HandleError(char *func);//server functions end //MAIN
int main(int argc, char *argv[]){
struct sockaddr_in localaddr;//local addre structure
SOCKET s;//s_data;//welcome socket and welcome socket for data connection,and port connection for connect to client
if(argc == 2)localaddr.sin_port = htons((u_short)atoi(argv[1]));localaddr.sin_port = htons(2302);else
localaddr.sin_addr.s_addr = INADDR_ANY;localaddr.sin_family = AF_INET;if(s
} printf(“socket failedn”);int addr_inlen;//addre lenght variable if(WSAStartup(MAKEWORD(2,2), &wsd)!= 0){
}
memset(&localaddr,0,sizeof(localaddr));//clear localaddr s = socket(PF_INET, SOCK_STREAM, 0);WSACleanup();
printf(“WSAStartup failedn”);
//INFINITE LOOP while(1){ // while loop 1
listen(s,3);
addr_inlen = sizeof(remoteaddr);//LISTEN
if(bind(s,(struct sockaddr *)(&localaddr),sizeof(localaddr))
} printf(“Bind failed!n”);//ACCEPT main connection(control connection)
newsocket = accept(s,(struct sockaddr *)(&remoteaddr),&addr_inlen);if(newsocket == INVALID_SOCKET)break;
printf(“connected to %s at port %d n”,inet_ntoa(remoteaddr.sin_addr),ntohs(localaddr.sin_port));
//Respond with welcome meage, FTP client requires those
sprintf(sbuffer,“200 Welcome rn”);
bytes = send(newsocket, sbuffer, strlen(sbuffer), 0);sprintf(sbuffer,“530 Log in rn”);
bytes = send(newsocket, sbuffer, strlen(sbuffer), 0);while(1)// while loop 2 {
n = 0;sy_error=1;
while(1)// while loop 3 {
bytes = recv(newsocket, &rbuffer[n], 1, 0);printf(“rbuffer[%d]=%cn”,n,rbuffer[n]);if((bytes
break;
if(rbuffer[n] == '$'){
}
if(rbuffer[n]!= 'r')
n++;
rbuffer[n] = ' ';break;//INFINITE LOOP
//RECEIVE
//THE FTP COMMANDS HERE //LIST
if(strncmp(rbuffer,“dir”,3)==0){ sdirfun(newsocket);
} // end of while loop 3
if((bytes
printf(“#The Server receives:# '%s' from client n”, rbuffer);
} //当前目录
if(strncmp(rbuffer,“pwd”,3)==0){
}
if(strncmp(rbuffer,“cd”,2)==0){
} scdfun(newsocket);spwdfun(newsocket);
//改变目录
//GET
}
if(strncmp(rbuffer,“put”,3)==0){
}
if(strncmp(rbuffer,“md”,2)==0){
}
if(strncmp(rbuffer,“del”,3)==0){
}
if(strncmp(rbuffer,“quit”,4)==0){
} printf(“quit n”);
sprintf(sbuffer, “221 Bye bye...rn”);
bytes = send(newsocket, sbuffer, strlen(sbuffer), 0);sy_error=0;break;sdelfun(newsocket);smdfun(newsocket);sputfun(newsocket);//PUT
if(strncmp(rbuffer,“get”,3)==0){ sgetfun(newsocket);
//MD
//QUIT
//Syntax error
//CLOSE CONTROL SOCKET
} // end of while loop 1 closesocket(s);
printf(“Welcome sockets close”);return 0;
closesocket(newsocket);
printf(“disconnected from %s at port %d, close control socket.n”,inet_ntoa(re
if(sy_error==1){
} printf(“command unrecognized, non-implemented!n”);sprintf(sbuffer, “500 Syntax error.n”);
bytes = send(newsocket, sbuffer, strlen(sbuffer), 0);
} // end of while loop 2
moteaddr.sin_addr),ntohs(localaddr.sin_port));
//CLOSE WELCOME SOCKET
}
int sdirfun(SOCKET newsocket){
char temp_buffer[80];
printf(“Equivalent to dir n”);
order[0]=' ';strcat(order,“dir ”);strcat(order,path);strcat(order,“ >tmp.txt”);system(order);FILE *fin;
fin=fopen(“tmp.txt”,“r”);
sprintf(sbuffer, “125 Transfering...rn”);
bytes = send(newsocket, sbuffer, strlen(sbuffer), 0);while(fgets(temp_buffer,80,fin)!=NULL){
}
fclose(fin);
sprintf(sbuffer, “226 Transfer completed...rn”);sprintf(sbuffer,“%s”,temp_buffer);// if(port_connect==0)send(newsocket, sbuffer, strlen(sbuffer), 0);
}
bytes = send(newsocket, sbuffer, strlen(sbuffer), 0);system(“del tmp.txt”);
//CLOSE the ns_data SOCKET or data port SOCKET if(port_connect==0){
}
sy_error=0;return 0;closesocket(ns_data);
sprintf(sbuffer,“226 Close the data socket...rn”);bytes = send(newsocket, sbuffer, strlen(sbuffer), 0);ns_data = socket(AF_INET, SOCK_STREAM, 0);
int sgetfun(SOCKET newsocket){
int i=4,k=0;
char filename[20],temp_buffer[80];
// identify the filename from rbuffer after the word “RETR ” while(1)// while loop 4 {
bytes = recv(newsocket, &rbuffer[i], 1, 0);printf(“rbuffer[i]=%cn”,rbuffer[i]);if((bytes
filename[k]=rbuffer[i];if(rbuffer[i] == ' '){ /*end on LF*/
}
if(rbuffer[i]!= 'r'){
} i++;
k++;/*ignore CR's*/ filename[k] = ' ';break;printf(“RETR mode.rn”);
//RECEIVE
} // end of while loop 4 order[0]=' ';
e);
}
strcat(order,path);if(strlen(path)>0)strcat(order,“”);strcat(order,filename);char *p_filename=order;FILE *fp;
if((fp=fopen(p_filename,“r”))== NULL){ sprintf(sbuffer, “Sorry, cannot open %s.Please try again.rn”,filenam
} bytes = send(newsocket, sbuffer, strlen(sbuffer), 0);sprintf(sbuffer, “226 Transfer completed...rn”);bytes = send(newsocket, sbuffer, strlen(sbuffer), 0);return 1;
else {
printf(“The file %s found,ready to transfer.n”,filename);sprintf(sbuffer, “125 Transfering...rn”);bytes = send(newsocket, sbuffer, strlen(sbuffer), 0);while(fgets(temp_buffer,80,fp)!=NULL){
sprintf(sbuffer,“%s”,temp_buffer);// if(port_connect==0)
send(newsocket, sbuffer, strlen(sbuffer), 0);
}//end of while fclose(fp);
sprintf(sbuffer, “226 Transfer completed...rn”);bytes = send(newsocket, sbuffer, strlen(sbuffer), 0);
}
sy_error=0;
return 0;
int sputfun(SOCKET newsocket){
printf(“Equivalent to put.n”);
int i=4,k=0;char filename[20];
// identify the filename from rbuffer after the word “RETR ” while(1){
bytes = recv(newsocket, &rbuffer[i], 1, 0);if((bytes
filename[k]=rbuffer[i];if(rbuffer[i] == ' '){ /*end on LF*/
}
if(rbuffer[i]!= 'r'){
} i++;
k++;/*ignore CR's*/ filename[k] = ' ';break;
} // end of while order[0]=' ';strcat(order,path);if(strlen(path)>0)strcat(order,“”);strcat(order,filename);printf(“filename=%s,”,order);char *p_filename=order;FILE *fpse;
if((fpse=fopen(order,“w”))== NULL){
} else { printf(“The file %s found,ready to transfer.n”,filename);while(1){
//读取流并显示 int ret;printf(“open errer”);return 1;
}
}
} ret = recv(newsocket, rbuffer, 80, 0);if(ret == 0)// Graceful close
return 0;
else if(ret == SOCKET_ERROR){
}
printf(“recv()failed: %dn”, WSAGetLastError());return 0;
if(strncmp(rbuffer,“226 Transfer”,strlen(“226 Transfer”))==0){
}
break;
fprintf(fpse,“%s”,rbuffer);
printf(“RBUFFER=%s”,rbuffer);fclose(fpse);
sy_error=0;
return 0;
int spwdfun(SOCKET newsocket){
char temp_buffer[160];
while(fgets(temp_buffer,80,fin)!=NULL){
temp_buffer[strlen(temp_buffer)-1]=' ';printf(“temp_buffer=%s”,temp_buffer);///////////////////////////////目录判定 if(path[0]!=' ')sprintf(sbuffer,“%s%s”,temp_buffer,path);else
printf(“Equivalent to pwd n”);//order[0]=' ';//strcat(order,“dir ”);//strcat(order,path);//strcat(order,);system(“cd >tmp.txt”);FILE *fin;
fin=fopen(“tmp.txt”,“r+”);
sprintf(sbuffer, “125 Transfering...rn”);bytes = send(newsocket, sbuffer, strlen(sbuffer), 0);
}
sprintf(sbuffer,“%s”,temp_buffer);
/////////////////////////////// if(port_connect==0)
//send(ns_data, sbuffer, strlen(sbuffer), 0);send(newsocket, sbuffer, strlen(sbuffer), 0);
}
fclose(fin);
sprintf(sbuffer, “226 Transfer completed...rn”);bytes = send(newsocket, sbuffer, strlen(sbuffer), 0);system(“del tmp.txt”);
//CLOSE the ns_data SOCKET or data port SOCKET if(port_connect==0){
}
sy_error=0;closesocket(ns_data);
sprintf(sbuffer,“226 Close the data socket...rn”);bytes = send(newsocket, sbuffer, strlen(sbuffer), 0);ns_data = socket(AF_INET, SOCK_STREAM, 0);
return 0;
int scdfun(SOCKET newsocket){
int i=3,k=0;char name[20],name2[20];int j,count=0;//path overfollow int pathlen;
printf(“Equivalent to cd n”);while(1){
//RECEIVE
bytes = recv(newsocket, &rbuffer[i], 1, 0);printf(“rbuffer[i]=%cn”,rbuffer[i]);printf(“bytes=%dn”,bytes);if((bytes
}
name2[k]=rbuffer[i];if(rbuffer[i] == ' '){
}
if(rbuffer[i]!= 'r'){
} i++;k++;
name[k] = ' ';name2[k] = ' ';break;
}//end while if(path[0]!=' ')strcat(path,“”);strcat(path,name);
if(strncmp(name2,“..”,2)==0)
{
}
pathlen=strlen(path);for(j=pathlen-1;j>=0;j--){
}
printf(“%d=n”,j);path[j+1]=' ';
if(path[j]==''){
}
if(count==2){
}
//path[j]=' ';break;
path[j]=' ';count++;
printf(“path=%s”,path);
sy_error=0;
return 0;int smdfun(SOCKET newsocket){
//CLOSE the ns_data SOCKET or data port SOCKET if(port_connect==0){
}
sy_error=0;//closesocket(ns_data);
sprintf(sbuffer,“226 Close the data socket...rn”);bytes = send(newsocket, sbuffer, strlen(sbuffer), 0);//ns_data = socket(AF_INET, SOCK_STREAM, 0);char name[20];int i=3,k=0;
printf(“Equivalent to md n”);while(1)// while loop 3 {
//RECEIVE
bytes = recv(newsocket, &rbuffer[i], 1, 0);printf(“rbuffer[i]=%cn”,rbuffer[i]);printf(“bytes=%dn”,bytes);if((bytes
}
order[0]=' ';strcat(order,“md ”);strcat(order,path);if(strlen(path)>0)strcat(order,“”);strcat(order,name);system(order);{
}
if(rbuffer[i]!= 'r'){
} i++;
k++;/*ignore CR's*/ /*end on LF*/ name[k] = ' ';break;
}
return 0;
int sdelfun(SOCKET newsocket){
}
if(rbuffer[i]!= 'r'){
} i++;k++;break;
printf(“Equivalent to del n”);while(1){
//RECEIVE int i=3,k=0;char name[20];
bytes = recv(newsocket, &rbuffer[i], 1, 0);printf(“rbuffer[i]=%cn”,rbuffer[i]);printf(“bytes=%dn”,bytes);if((bytes
if(rbuffer[i] == ' '){
name[k] = ' ';
}//end while order[0]=' ';strcat(order,“rd ”);
strcat(order,path);if(path[0]!=' ')strcat(path,“”);strcat(order,name);system(order);sprintf(sbuffer,“del ok...rn”);
}
void HandleError(char *func){
char info[65]= {0};
_snprintf(info, 64, “%s: %dn”, func, WSAGetLastError());printf(info);}
bytes = send(newsocket, sbuffer, strlen(sbuffer), 0);if(bytes == SOCKET_ERROR)
{
}
HandleError(“recv()”);sy_error=1;return 1;
sy_error=0;
return 0;