




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程设计:FTP的设计与实现 /*clie nt 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 szServerip128, / Server to connect to szMessage1024; / Message to send to s
2、ever int iPort = DEFAULT_PORT; / Port on server to connect to /DWORD dwCount =DEFAULT_COUNT; / Number of times to send message BOOL bSendOnly = FALSE; / Send data only; dont receive int dirfun(); int getfun(); int putfun(); int pwdfun(); int cdfun(); int mdfun(); int delfun(); int usafun(); void usa
3、ge() 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) inti; for (i
4、 = 1; i 3) iPort = atoi( break ; case s:/ Server if (strlen(argvi) 3) strcpy(szServerip, break ; case n:/ Number of times to send message if (strlen(argvi) 3) /dwCount = atol( break ; case o:/ Only send message; dont receive bSendOnly = TRUE; break ; default : usage(); break ; int main( int argc, ch
5、ar *argv) WSADATA wsd; SOCKET sClient; char szBufferDEFAULT_BUFFER; intret; /unsigned inti; /int j; struct sockaddr_in server; struct hostent *host = NULL; char choice5,choice240; / Parse the command line and load Winsock / argv1=-s:; strcpy(szServerip, /ValidateArgs(argc, argv); if (WSASta
6、rtup(MAKEWORD(2,2), 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; se
7、rver.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(szSe
8、rverip); if (host = NULL) printf(Unable to resolve server: %sn, szServerip); return 1; CopyMemory ( if (connect(sClient, ( struct sockaddr *) 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) p
9、rintf(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 (s
10、trncmp(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,
11、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 ; /el
12、se puts(输入错误,请重新输入); fflush(stdin); fflush(stdin); printf(n); printf(n); closesocket(sClient); WSACIeanup(); 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 (re
13、t = 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;
14、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 fi
15、lename40) int ret; FILE *fpre; char szBuffer80; szMessageO=O: strcat(szMessage, get$); /strcat(szMessage, ); strcat(szMessage,filename); printf(MSG4=%cn,szMessage4); szMessage0=g;szMessage1=e;szMessage2=t; / szMessage4=m;szMessage5=e;szMessage 6=.;szMessage7=t: / szMessage8=x;szMessage9=t;szMessage1
16、0=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_ERRO
17、R) 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 =
18、 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)=O) break; if (strncmp(szBuffer,500 Syntax error,st
19、rlen(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; s
20、trcat(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 ( (f
21、pse=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,
22、 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(
23、); 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,szBuffe
24、r); 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
25、(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$; szMessageO=O: strcat(szMessage, md$); /strcat(sz
26、Message, ); 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(sClien
27、t, 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 er
28、ror)=0) break ; return 0; int delfun(SOCKET sClient, char name20) int ret; char szBuffer80; szMessageO=O: 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, WSAGetLastE
29、rror(); 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(de
30、l %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(”?:显示你提供的命令”); put
31、s(quit :退出返回); return 0; /int quit() *server.c* * #include #include #include #pragma comment lib ,ws2_32.lib) WSADATA wsd; char sbuffer80,rbuffer80;/send and receive buffers int n,bytes; /counters SOCKET newsocket,ns_data; struct sockaddr_in remoteaddr;remoteaddr_data; int port_connect=0; /port conn
32、ect flag char path80=; char order100=; /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 ne
33、wsocket); int sdelfun(SOCKET newsocket); void HandleError( char *func); /server functions end /MAIN int main( int argc, char *argv) port struct sockaddr_in localaddr; /local address structure SOCKETs; /s_data;/welcome socket and welcome socket for data connection,and connection for connect to client
34、 int addr_inlen; /address lenght variable if (WSAStartup(MAKEWORD(2,2), printf(WSAStartup failedn); memset( /clear localaddr s = 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 locala
35、ddr.sin_port = htons(2302); localaddr.sin_addr.s_addr = INADDR_ANY; if (bind(s,( struct sockaddr *)( /INFINITE LOOP while (1) / while loop 1 /LISTEN listen(s,3); addr_inlen = sizeof (remoteaddr); /ACCEPT main connection (control connection) newsocket = accept(s,( struct sockaddr *)( if (newsocket =
36、INVALID_SOCKET)break ; %d printf(connectedto%s at port n,inet_ntoa(remoteaddr.sin_addr),ntohs(localaddr.sin_port); /Respond with welcome message, FTP client requires those sprintf(sbuffer,200 Welcome rn); bytes = send(newsocket, sbuffer, strlen(sbuffer), 0); sprintf(sbuffer,530 Log in rn); bytes = s
37、end(newsocket, sbuffer, strlen(sbuffer), 0); /INFINITE LOOP while (1)/ while loop 2 n = 0; sy_error=1; while (1)/ while loop 3 /RECEIVE bytes = recv(newsocket, printf(rbuffer%d=%cn,n,rbuffern); if (bytes 0) | (bytes = 0) break; if (rbuffern = $) rbuffern = 0; break; if (rbuffern != r) n+; / end of w
38、hile loop 3 if (bytes 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) sprintf(sbuffer,%s,temp_buffer);/ if (port_connect=0) send(newsocket, sbuffer, strlen(s
39、buffer), 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) closesocket(ns_data); sprintf(sbuffer,226 Close the data socket. rn); bytes = send(news
40、ocket, 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 /RECEIVE bytes = recv
41、(newsocket, 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, sbuffer, strlen(sbuffer), 0); sprintf
42、(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) spri
43、ntf(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.
44、n); int i=4,k=0; char filename20; / identify the filename from rbuffer after the word RETR while (1) bytes = recv(newsocket, if (bytes 0) strcat(order,); strcat(order,filename); printf(filename=%s,order); char *p_filename=order; FILE *fpse; if ( (fpse=fopen(order,w) = NULL ) printf(open errer); retu
45、rn 1; else printf(The file %s found,ready to transfer.n,filename); while (1) /读取流并显示 int ret; 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
46、 Transfer)=O) break; fprintf(fpse,%s,rbuffer); printf(RBUFFER=%s,rbuffer); fclose(fpse); sy_error=0; return 0; int spwdfun(SOCKET newsocket) printf(Equivalent to pwd n); order0=0; /strcat(order,dir ); strcat(order,path); /strcat(order,); system(cd tmp.txt); FILE *fin; fin=fopen(tmp.txt,r+); sprintf(
47、sbuffer, 125 Transfering. rn); bytes = send(newsocket, sbuffer, strlen(sbuffer), 0); char temp_buffer160; while (fgets(temp_buffer,80,fin)!=NULL) temp_bufferstrlen(temp_buffer)-1=0: printf(temp_buffer=%s,temp_buffer); /目录判定 if (path0!=0) sprintf(sbuffer,%s%s,temp_buffer,path); else sprintf(sbuffer,%
48、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) 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); sy_er
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 税务筹划与申报管理规范
- 高三侯氏制碱法课件
- 电商行业市场前景及投资研究报告:老牌焕新拥抱电商
- 离婚协议模板制作与授权使用及修改合同
- 石嘴山政务公开信息发布与传播技术服务合同
- 个人自建房产权转让合同(含土地证及配套设施)
- 广告投放风险管控代理合同
- 骨髓瘤x线影像诊断课件
- 农学领域节水灌溉制度
- 化学物质存储管理细则规定执行
- GB/T 45701-2025校园配餐服务企业管理指南
- 人教版一年级数学上册数学游戏自测卷(含答案)
- 生物质颗粒工人管理制度
- 生物医药公司采购管理制度
- 煤矿关联交易管理制度
- 兵团职工面试试题及答案
- 园林养护班组管理制度
- 矿业公司股权转让与资源开发合作协议
- 司马懿的课件
- 氟化工艺安全操作课件
- 工程论文写作教学课件
评论
0/150
提交评论