您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > FTP客户端和服务器源代码(C语言)实现
课程设计:FTP的设计与实现/****************client.c****************/#includewinsock2.h#includestdio.h#includestdlib.h#pragmacomment(lib,ws2_32.lib)#defineDEFAULT_PORT2302#defineDEFAULT_BUFFER2048#defineDEFAULT_MESSAGEThisisatestoftheemergency\broadcastingsystemcharszServerip[128],//ServertoconnecttoszMessage[1024];//MessagetosendtoseverintiPort=DEFAULT_PORT;//Portonservertoconnectto//DWORDdwCount=DEFAULT_COUNT;//NumberoftimestosendmessageBOOLbSendOnly=FALSE;//Senddataonly;don'treceiveintdirfun();intgetfun();intputfun();intpwdfun();intcdfun();intmdfun();intdelfun();intusafun();voidusage(){printf(usage:client[-p:x][-s:IP][-n:x][-o]\n\n);printf(-p:xRemoteporttosendto\n);printf(-s:IPServer'sIPaddressorhostname\n);printf(-n:xNumberoftimestosendmessage\n);printf(-oSendmessagesonly;don'treceive\n);ExitProcess(1);}voidValidateArgs(intargc,char**argv){inti;for(i=1;iargc;i++){if((argv[i][0]=='-')||(argv[i][0]=='/')){switch(tolower(argv[i][1])){case'p'://Remoteportif(strlen(argv[i])3)iPort=atoi(&argv[i][3]);break;case's'://Serverif(strlen(argv[i])3)strcpy(szServerip,&argv[i][3]);break;case'n'://Numberoftimestosendmessageif(strlen(argv[i])3)//dwCount=atol(&argv[i][3]);break;case'o'://Onlysendmessage;don'treceivebSendOnly=TRUE;break;default:usage();break;}}}}intmain(intargc,char**argv){WSADATAwsd;SOCKETsClient;charszBuffer[DEFAULT_BUFFER];intret;//unsignedinti;//intj;structsockaddr_inserver;structhostent*host=NULL;charchoice[5],choice2[40];//ParsethecommandlineandloadWinsock//argv[1]=-s:127.0.0.1;strcpy(szServerip,&argv[1][3]);//ValidateArgs(argc,argv);if(WSAStartup(MAKEWORD(2,2),&wsd)!=0){printf(FailedtoloadWinsocklibrary!\n);return1;}//strcpy(szMessage,DEFAULT_MESSAGE);////Createthesocket,andattempttoconnecttotheserver//sClient=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);if(sClient==INVALID_SOCKET){printf(socket()failed:%d\n,WSAGetLastError());return1;}server.sin_family=AF_INET;server.sin_port=htons(iPort);printf(server.sin_port=%u\n,server.sin_port);server.sin_addr.s_addr=inet_addr(szServerip);////Ifthesuppliedserveraddresswasn'tintheform//aaa.bbb.ccc.dddit'sahostname,sotrytoresolveit//if(server.sin_addr.s_addr==INADDR_NONE){host=gethostbyname(szServerip);if(host==NULL){printf(Unabletoresolveserver:%s\n,szServerip);return1;}CopyMemory(&server.sin_addr,host-h_addr_list[0],host-h_length);}if(connect(sClient,(structsockaddr*)&server,sizeof(server))==SOCKET_ERROR){printf(connect()failed:%d\n,WSAGetLastError());return1;}//显示接通信息//////for(j=0;j2;j++)//{ret=recv(sClient,szBuffer,DEFAULT_BUFFER,0);if(ret==0)//Gracefulclosereturn0;elseif(ret==SOCKET_ERROR){printf(recv()failed:%d\n,WSAGetLastError());return0;}szBuffer[ret]='\0';printf(%s\n,szBuffer);if(ret15){ret=recv(sClient,szBuffer,DEFAULT_BUFFER,0);if(ret==0)//Gracefulclosereturn0;elseif(ret==SOCKET_ERROR){//printf(recv()failed:%d\n,WSAGetLastError());return0;}szBuffer[ret]='\0';printf(%s\n,szBuffer);}//printf(DEFAULT_BUFFER=%d\n,DEFAULT_BUFFER);}while(1){puts(------------------------------------------);printf(ftp);scanf(%s,choice);if(strncmp(choice,dir,3)==0||strncmp(choice,DIR,2)==0){dirfun(sClient);continue;}elseif(strncmp(choice,pwd,3)==0||strncmp(choice,PWD,3)==0){pwdfun(sClient);continue;}elseif(strncmp(choice,?,1)==0){usafun(sClient);continue;}elseif(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;}elseif(strncmp(choice,put,3)==0||strncmp(choice,PUT,3)==0){putfun(sClient,choice2);continue;}elseif(strncmp(choice,cd,2)==0||strncmp(choice,CD,2)==0){cdfun(sClient,choice2);continue;}elseif(strncmp(choice,md,2)==0||strncmp(choice,MD,2)==0){mdfun(sClient,choice2);continue;}elseif(strncmp(choice,del,3)==0||strncmp(choice,DEL,3)==0){delfun(sClient,choice2);continue;}//elseputs(输入错误,请重新输入);fflush(stdin);fflush(stdin);printf(\n);printf(\n);}closesocket(sClient);WSACleanup();return0;}intdirfun(SOCKETsClient){intret;char*MSG=dir$;charszBuffer[80];strcpy(szMessage,MSG);ret=send(sClient,szMessage,strlen(szMessage),0);if(ret==0)return1;elseif(ret==SOCKET_ERROR){printf(send()failed:%d\n,WSAGetLastError());return1;}//printf(Send%dbytes\n,ret);//printf(bSendOnly=%d\n,bSendOnly);while(!bSendOnly){//读取流并显示//ret=recv(sClient,szBuffer,80,0);//printf(%s,szBuffer);ret=recv(sClient,szBuffer,80,0);if(ret==0)//Gracefulclosereturn1;elseif(ret==SOCKET_ERROR){printf(recv()failed:%d\n,WSAGetLastError());return1;}szBuffer[ret]='\0';if(strncmp(szBuffer,226Close,strlen(226Close))==0){break;}printf(%s,szBuffer);if(strncmp(szBuffer,500Syntaxerror,strlen(500Syntaxerror))==0){break;}}return0;}intgetfun(SOCKETsClient,charfilename[40]){intret;FILE*fpre;charszBuffer[80];szMessage[0]='\0';strcat(szMessage,get$);//strcat(szMessage,\\);strcat(szMessage,filename);//printf(MSG[4]=%c\n,szMessage[4]);//szMessage[0]='g';szMessage[1]='e';szMessage[2]='t';////szMessage[4]='m';szMessage[5]='e';szMessage[6]='.';szMessage[7]='t';////szMessage[8]='x';szMessage[9]='t';szMessage[10]='\0';ret=send(sClient,sz
本文标题:FTP客户端和服务器源代码(C语言)实现
链接地址:https://www.777doc.com/doc-5518559 .html