FTP客户端和服务器源代码(C语言)实现.doc_第1页
FTP客户端和服务器源代码(C语言)实现.doc_第2页
FTP客户端和服务器源代码(C语言)实现.doc_第3页
FTP客户端和服务器源代码(C语言)实现.doc_第4页
FTP客户端和服务器源代码(C语言)实现.doc_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程设计:FTP的设计与实现/*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 systemcharszServerip128, / Server to connect to szMessage1024; / Message to send to severint iPort = DEFAULT_PORT;/ Port on server to connect to/DWORD dwCount = DEFAULT_COUNT; / Number of times to send messageBOOLbSendOnly = FALSE; / Send data only; dont receiveint 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 -onn); printf( -p:x Remote port to send ton); printf( -s:IP Servers IP address or hostnamen); printf( -n:x Number of times to send messagen); printf( -o Send messages only; dont receiven); ExitProcess(1);void ValidateArgs(int argc, char *argv) int i; for(i = 1; i 3) iPort = atoi(&argvi3); break; case s: / Server if (strlen(argvi) 3) strcpy(szServerip, &argvi3); break; case n: / Number of times to send message if (strlen(argvi) 3) /dwCount = atol(&argvi3); break;case o: / Only send message; dont receive bSendOnly = TRUE; break; default: usage(); break; int main(int argc, char *argv) WSADATA wsd; SOCKET sClient; char szBufferDEFAULT_BUFFER; int ret; /unsigned int i; /int j; struct sockaddr_in server; struct hostent *host = NULL; char choice5,choice240; / Parse the command line and load Winsock / argv1=-s:; strcpy(szServerip, &argv13); /ValidateArgs(argc, argv); if (WSAStartup(MAKEWORD(2,2), &wsd) != 0) printf(Failed to load Winsock library!n); return 1; /strcpy(szMessage, 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 address wasnt in the form / aaa.bbb.ccc.ddd its 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_list0, host-h_length); if (connect(sClient, (struct sockaddr *)&server, sizeof(server) = SOCKET_ERROR) printf(connect() failed: %dn, WSAGetLastError(); return 1; /显示接通信息 / / /for(j=0;j2;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; szBufferret = 0; printf(%sn,szBuffer); if(ret ); 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 szBuffer80; strcpy(szMessage, MSG); ret = send(sClient, szMessage, strlen(szMessage), 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; szBufferret = 0; 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 filename40) int ret; FILE *fpre; char szBuffer80; szMessage0=0; strcat(szMessage, get$); /strcat(szMessage, ); strcat(szMessage,filename); /printf(MSG4=%cn,szMessage4); /szMessage0=g;szMessage1=e;szMessage2=t; / /szMessage4=m;szMessage5=e;szMessage6=.;szMessage7=t; / /szMessage8=x;szMessage9=t;szMessage10=0; ret = send(sClient, szMessage, strlen(szMessage)+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; */ szBufferret = 0; 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; szBufferret = 0; /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 filename40) int ret;/int i; FILE *fpse;/char *filename; /char *MSG=get0me.txt; char szBuffer80,temp_buffer80; /sprintf(szMessage, get0,te.txt0); szMessage0=0; strcat(szMessage, put$); strcat(szMessage,filename); ret = send(sClient, szMessage, strlen(szMessage)+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 szBuffer160; strcpy(szMessage, MSG); ret = send(sClient, szMessage, strlen(szMessage), 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; szBufferret = 0; 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 pathname40) int ret; szMessage0=0; strcat(szMessage, cd$); strcat(szMessage,pathname); ret = send(sClient, szMessage, strlen(szMessage)+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 pathname20) int ret;char szBuffer160; /char *MSG=md$; szMessage0=0; strcat(szMessage, md$); /strcat(szMessage, ); strcat(szMessage,pathname); /strcpy(szMessage, MSG); ret = send(sClient, szMessage, strlen(szMessage)+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; szBufferret = 0; 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 name20) int ret;char szBuffer80; szMessage0=0; strcat(szMessage, del$); strcat(szMessage,name); ret = send(sClient, szMessage, strlen(szMessage)+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; szBufferret = 0; 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 sbuffer80,rbuffer80;/send and receive buffersint n,bytes;/countersSOCKET newsocket,ns_data;struct sockaddr_in remoteaddr; /remoteaddr_data;int port_connect=0;/port connect flagchar path80=;char order100=;/SOCKET s_data_port;int sy_error=1; / use for indicate Syntax error/server functionsint 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/MAINint main(int argc, char *argv) struct sockaddr_in localaddr;/local address structureSOCKET s;/s_data;/welcome socket and welcome socket for data connection,and port connection for connect to clientint addr_inlen;/address lenght variableif (WSAStartup(MAKEWORD(2,2), &wsd) != 0)WSACleanup();printf(WSAStartup failedn);memset(&localaddr,0,sizeof(localaddr);/clear localaddrs = socket(PF_INET, SOCK_STREAM, 0);if (s 0)printf(socket failedn);localaddr.sin_family = AF_INET;if(argc = 2) localaddr.sin_port = htons(u_short)atoi(argv1);else localaddr.sin_port = htons(2302);localaddr.sin_addr.s_addr = INADDR_ANY; if (bind(s,(struct sockaddr *)(&localaddr),sizeof(localaddr) 0)printf(Bind failed!n); /INFINITE LOOPwhile (1) / while

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论