FTP客户端和服务器源代码C语言实现.docx
- 文档编号:12214202
- 上传时间:2023-04-17
- 格式:DOCX
- 页数:42
- 大小:22.72KB
FTP客户端和服务器源代码C语言实现.docx
《FTP客户端和服务器源代码C语言实现.docx》由会员分享,可在线阅读,更多相关《FTP客户端和服务器源代码C语言实现.docx(42页珍藏版)》请在冰豆网上搜索。
FTP客户端和服务器源代码C语言实现
课程设计:
FTP的设计与实现
/****************client.c****************/
#include
#include
#include
#pragmacomment(lib,"ws2_32.lib")
#defineDEFAULT_PORT 2302
#defineDEFAULT_BUFFER 2048
#defineDEFAULT_MESSAGE "Thisisatestoftheemergency\broadcastingsystem"
char szServerip[128], //Servertoconnectto
szMessage[1024]; //Messagetosendtosever
int iPort =DEFAULT_PORT; //Portonservertoconnectto
//DWORDdwCount =DEFAULT_COUNT;//Numberoftimestosendmessage
BOOL bSendOnly=FALSE; //Senddataonly;don'treceive
intdirfun();
intgetfun();
intputfun();
intpwdfun();
intcdfun();
intmdfun();
intdelfun();
intusafun();
voidusage()
{
printf("usage:
client[-p:
x][-s:
IP][-n:
x][-o]\n\n");
printf(" -p:
x Remoteporttosendto\n");
printf(" -s:
IP Server'sIPaddressorhostname\n");
printf(" -n:
x Numberoftimestosendmessage\n");
printf(" -o Sendmessagesonly;don'treceive\n");
ExitProcess
(1);
}
voidValidateArgs(intargc,char**argv)
{
int i;
for(i=1;i { if((argv[i][0]=='-')||(argv[i][0]=='/')) { switch(tolower(argv[i][1])) { case'p': //Remoteport 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': //Numberoftimestosendmessage if(strlen(argv[i])>3) //dwCount=atol(&argv[i][3]); break; case'o': //Onlysendmessage;don'treceive bSendOnly=TRUE; break; default: usage(); break; } } } } intmain(intargc,char**argv) { WSADATA wsd; SOCKET sClient; char szBuffer[DEFAULT_BUFFER]; int ret; //unsignedint i; //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.ddd"it'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;j<2;j++) // { ret=recv(sClient,szBuffer,DEFAULT_BUFFER,0); if(ret==0) //Gracefulclose return0; elseif(ret==SOCKET_ERROR) { printf("recv()failed: %d\n",WSAGetLastError()); return0; } szBuffer[ret]='\0'; printf("%s\n",szBuffer); if(ret<15) { ret=recv(sClient,szBuffer,DEFAULT_BUFFER,0); if(ret==0) //Gracefulclose return0; 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; } //else puts("输入错误,请重新输入"); 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) //Gracefulclose return1; 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,szMessage,strlen(szMessage)+1,0); if(ret==0) return1; elseif(ret==SOCKET_ERROR) { printf("send()failed: %d\n",WSAGetLastError()); return1; } printf("Send%dbytes\n",ret); ret=recv(sClient,szBuffer,80,0); /*if(ret==0) //Gracefulclose break; elseif(ret==SOCKET_ERROR) { printf("recv()failed: %d\n",WSAGetLastError()); break; }*/ szBuffer[ret]='\0'; printf("%s\n",szBuffer); if(strncmp(szBuffer,"125Transfering...",strlen("125Transfering..."))==0) { if((fpre=fopen(filename,"w"))==NULL) { printf("openerrer"); return1; } printf("bSendOnly=%d\n",bSendOnly); while(! bSendOnly) { //读取流并显示 ret=recv(sClient,szBuffer,80,0);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FTP 客户端 服务器 源代码 语言 实现