FTP客户端和服务器源代码(C语言)实现

上传人:无*** 文档编号:84845599 上传时间:2022-05-04 格式:DOC 页数:23 大小:92.50KB
收藏 版权申诉 举报 下载
FTP客户端和服务器源代码(C语言)实现_第1页
第1页 / 共23页
FTP客户端和服务器源代码(C语言)实现_第2页
第2页 / 共23页
FTP客户端和服务器源代码(C语言)实现_第3页
第3页 / 共23页
资源描述:

《FTP客户端和服务器源代码(C语言)实现》由会员分享,可在线阅读,更多相关《FTP客户端和服务器源代码(C语言)实现(23页珍藏版)》请在装配图网上搜索。

1、-课程设计:FTP的设计与实现/*client.c*/*include *include *include *pragmament(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

2、 = 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

3、-p:* -s:IP -n:* -onn); printf( -p:* Remote port to send ton); printf( -s:IP Servers IP address or hostnamen); printf( -n:* Number of times to send messagen); printf( -o Send messages only; dont receiven); E*itProcess(1);void ValidateArgs(int argc, char *argv)int i;for(i = 1; i 3) iPort = atoi(&argvi

4、3);break;case s: / Serverif (strlen(argvi) 3) strcpy(szServerip, &argvi3);break;case n: / Number of times to send messageif (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

5、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 mand line and load Winsock/ argv1=-s:127.0.0.1; strcpy(szServerip, &argv13);/ValidateArgs(argc, argv);if (WSAStartup(MAKEWORD(2,2),

6、&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; ser

7、ver.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) hos

8、t = 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();r

9、eturn 1; /显示接通信息/for(j=0;j2;j+)/ ret = recv(sClient, szBuffer, DEFAULT_BUFFER, 0);if (ret = 0) / Graceful closereturn 0;elseif (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|strn

10、cmp(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|strncm

11、p(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,ch

12、oice2);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();return 0;int dirfun(SOCKET sClient)int ret;char *MSG=dir$;char szBuffer80; strcpy(

13、szMessage, MSG); ret = send(sClient, szMessage, strlen(szMessage), 0);if (ret = 0)return 1;elseif (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);

14、/printf(%s,szBuffer); ret = recv(sClient, szBuffer, 80, 0);if (ret = 0) / Graceful closereturn 1;elseif(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 Syn

15、ta* error,strlen(500 Synta* 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

16、=m;szMessage5=e;szMessage6=.;szMessage7=t;/szMessage8=*;szMessage9=t;szMessage10=0; ret = send(sClient, szMessage, strlen(szMessage)+1, 0);if (ret = 0)return 1;elseif (ret = SOCKET_ERROR) printf(send() failed: %dn, WSAGetLastError();return 1; printf(Send %d bytesn, ret); ret = recv(sClient, szBuffer

17、, 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);retur

18、n 1; printf(bSendOnly=%dn,bSendOnly);while(!bSendOnly) /读取流并显示 ret = recv(sClient, szBuffer, 80, 0);if (ret = 0) / Graceful closereturn 1;elseif (ret = SOCKET_ERROR) printf(recv() failed: %dn, WSAGetLastError();return 1; szBufferret = 0;/printf(%s,szBuffer); if(strncmp(szBuffer,226 Transfer,strlen(2

19、26 Transfer)=0) break; if(strncmp(szBuffer,500 Synta* error,strlen(500 Synta* 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.t*t;char szBuffer80,temp_buffe

20、r80;/sprintf(szMessage, get0,te.t*t0); szMessage0=0; strcat(szMessage, put$); strcat(szMessage,filename); ret = send(sClient, szMessage, strlen(szMessage)+1, 0);if (ret = 0)return 0;elseif (ret = SOCKET_ERROR) printf(send() failed: %dn, WSAGetLastError();return 1; /printf(Send %d bytesn, ret);/filen

21、ame=me.t*t; 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, 22

22、6 Transfer pleted. 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;elseif (ret = SOCKET_ERROR) printf(se

23、nd() 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 closereturn 1;elseif (ret = SOCKET_ERROR) printf(recv() failed: %dn, WSAGetLastError();return 1; szBuffer

24、ret = 0; printf(%sn,szBuffer);if(strncmp(szBuffer,226 Close,strlen(226 Close)=0) break; if(strncmp(szBuffer,500 Synta* error,strlen(500 Synta* error)=0) break; return 0;int cdfun(SOCKET sClient,char pathname40)int ret; szMessage0=0; strcat(szMessage, cd$); strcat(szMessage,pathname); ret = send(sCli

25、ent, szMessage, strlen(szMessage)+1, 0);if (ret = 0)return 1;elseif (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$);

26、/strcat(szMessage, ); strcat(szMessage,pathname);/strcpy(szMessage, MSG); ret = send(sClient, szMessage, strlen(szMessage)+1, 0);if (ret = 0)return 1;elseif (ret = SOCKET_ERROR) printf(send() failed: %dn, WSAGetLastError();return 1; printf(Send %d bytesn, ret);while(!bSendOnly) /读取流并显示 ret = recv(sC

27、lient, szBuffer, 80, 0);if (ret = 0) / Graceful closereturn 1;elseif (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 Synta* error,strlen(500 Synta* erro

28、r)=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;elseif (ret = SOCKET_ERROR) printf(send() failed: %dn, WSAGetLastError();ret

29、urn 1; printf(Send %d bytesn, ret);while(!bSendOnly) ret = recv(sClient, szBuffer, 80, 0);if (ret = 0) / Graceful closereturn 1;elseif (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);brea

30、k; printf(%s,szBuffer);if(strncmp(szBuffer,500 Synta* error,strlen(500 Synta* 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

31、()/*server.c*/*include *include *include *pragmament(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_d

32、ata_port;int sy_error=1; / use for indicate Synta* 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(ch

33、ar *func);/server functions end/MAINint main(int argc, char *argv) struct sockaddr_in localaddr;/local address structureSOCKET s;/s_data;/wele socket and wele socket for data connection,and port connection for connect to clientint addr_inlen;/address lenght variableif (WSAStartup(MAKEWORD(2,2), &wsd

34、) != 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);elselocaladdr.sin_port = htons(2302);loca

35、laddr.sin_addr.s_addr = INADDR_ANY;if (bind(s,(struct sockaddr *)(&localaddr),sizeof(localaddr) 0)printf(Bind failed!n); /INFINITE LOOPwhile (1) / while loop 1/LISTENlisten(s,3);addr_inlen = sizeof(remoteaddr);/ACCEPT main connection (control connection)newsocket = accept(s,(struct sockaddr *)(&remo

36、teaddr),&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 wele message, FTP client requires thosesprintf(sbuffer,200 Wele rn);bytes = send(newsocket, sbuffer, strlen(sbuffer), 0);sprintf(sbuff

37、er,530 Log in rn);bytes = send(newsocket, sbuffer, strlen(sbuffer), 0);/INFINITE LOOPwhile (1) / while loop 2n = 0;sy_error=1;while (1) / while loop 3/RECEIVEbytes = recv(newsocket, &rbuffern, 1, 0);printf(rbuffer%d=%cn,n,rbuffern);if (bytes 0) | (bytes = 0)break;if (rbuffern = $)rbuffern = 0;break;

38、 if (rbuffern != r)n+; / end of while loop 3 if (bytes tmp.t*t);system(order);FILE *fin;fin=fopen(tmp.t*t,r);sprintf(sbuffer, 125 Transfering. rn);bytes = send(newsocket, sbuffer, strlen(sbuffer), 0);while (fgets(temp_buffer,80,fin)!=NULL)sprintf(sbuffer,%s,temp_buffer); /if (port_connect=0) send(ne

39、wsocket, sbuffer, strlen(sbuffer), 0);fclose(fin);sprintf(sbuffer, 226 Transfer pleted. rn);bytes = send(newsocket, sbuffer, strlen(sbuffer), 0);system(del tmp.t*t);/CLOSE the ns_data SOCKET or data port SOCKETif(port_connect=0) closesocket(ns_data);sprintf(sbuffer,226 Close the data socket. rn);byt

40、es = send(newsocket, sbuffer, strlen(sbuffer), 0);ns_data = socket(AF_INET, SOCK_STREAM, 0);sy_error=0;return 0;int sgetfun(SOCKET newsocket)printf(RETR mode.rn);int i=4,k=0;char filename20,temp_buffer80;/ identify the filename from rbuffer after the word RETR while (1) / while loop 4/RECEIVEbytes = recv(newsocket, &rbufferi, 1, 0);printf(rbufferi=%cn,rbufferi);if (bytes 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,filename);bytes = send(newsocket, sb

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!