文件传输协议的简单设计与实现(c语言._c语言简单的ftp

2020-02-28 协议书 下载本文

文件传输协议的简单设计与实现(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=“getme.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;

《文件传输协议的简单设计与实现(c语言..docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
文件传输协议的简单设计与实现(c语言.
点击下载文档
相关专题 c语言简单的ftp 设计 传输协议 语言 c语言简单的ftp 设计 传输协议 语言
[协议书]相关推荐
    [协议书]热门文章
      下载全文