版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程设计:FTP的设计与实现/*client.c*/#include <winsock2.h>#include <stdio.h>#include <stdlib.h>#pragma comment(lib,"ws2_32.lib")#define DEFAULT_PORT 2302#define DEFAULT_BUFFER 2048#define DEFAULT_MESSAGE
2、160; "This is a test of the emergency broadcasting system"char szServerip128, / Server to connect to szMessage1024; / Message to send to severint
3、160; iPort = DEFAULT_PORT; / Port on server to connect to/DWORD dwCount = DEFAULT_COUNT; / Number of times to send messageBOOL bSendOnly = FALSE; / Send data only; don't receiveint dirfun();int ge
4、tfun();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 t
5、on"); printf(" -s:IP Server's IP address or hostnamen"); printf(" -n:x Number of times to send messagen");
6、60; printf(" -o Send messages only; don't receiven"); ExitProcess(1);void ValidateArgs(int argc, char *argv) int
7、 i; for(i = 1; i < argc; i+) if (argvi0 = '-') | (argvi0 = '/')
8、 switch (tolower(argvi1) case 'p': / Remote port
9、60; if (strlen(argvi) > 3) iPort = atoi(&argvi3);
10、0; break; case 's': / Server
11、 if (strlen(argvi) > 3) strcpy(szServerip, &argvi3); &
12、#160; break; case 'n': / Number of times to send message
13、160; if (strlen(argvi) > 3) /dwCount = atol(&argvi3);
14、 break; case 'o': / Only send message; don't receive
15、60; bSendOnly = TRUE; break;
16、160; default: usage(); break; &
17、#160; int main(int argc, char *argv) WSADATA wsd; SOCKET sClient; char
18、 szBufferDEFAULT_BUFFER; int ret; /unsigned int i; /int j;
19、160; struct sockaddr_in server; struct hostent *host = NULL; char choice5,choice240; / Parse the command line and load Winsock / argv1="-s:"
20、60; strcpy(szServerip, &argv13); /ValidateArgs(argc, argv); if (WSAStartup(MAKEWORD(2,2), &wsd) != 0) printf("Failed to load Winsock library!n");
21、0; 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 (sCli
22、ent = INVALID_SOCKET) printf("socket() failed: %dn", WSAGetLastError(); return 1; server.sin_family = AF_INET; server.sin_port = hto
23、ns(iPort); printf("server.sin_port=%un",server.sin_port); server.sin_addr.s_addr = inet_addr(szServerip); / / If the supplied server address wasn't in the form / "aaa.bbb.ccc.ddd" i
24、t's a hostname, so try to resolve it / if (server.sin_addr.s_addr = INADDR_NONE) host = gethostbyname(szServerip); if (host = NULL) &
25、#160; printf("Unable to resolve server: %sn", szServerip); return 1;
26、; CopyMemory(&server.sin_addr, host->h_addr_list0, host->h_length); if (connect(sClient, (struct sockaddr *)&server, sizeof(server) =
27、SOCKET_ERROR) printf("connect() failed: %dn", WSAGetLastError(); return 1; /显示接通信息 / /
28、0; /for(j=0;j<2;j+) / ret = recv(sClient, szBuffer, DEFAULT_BUFFER, 0); if (ret = 0) &
29、#160; / Graceful close return 0; else if (ret = SOCKET_ERROR)
30、0; printf("recv() failed: %dn", WSAGetLastError(); return 0;
31、160; szBufferret = '0' printf("%sn",szBuffer); if(ret
32、<15) ret = recv(sClient, szBuffer, DEFAULT_BUFFER, 0);
33、160; if (ret = 0) / Graceful close return 0;
34、0; else if (ret = SOCKET_ERROR)
35、0; /printf("recv() failed: %dn", WSAGetLastError(); return 0; &
36、#160; szBufferret = '0' pri
37、ntf("%sn",szBuffer); /printf("DEFAULT_BUFFER=%dn",DEFAULT_BUFFER); w
38、hile(1) puts("-"); printf("ftp> "); scanf("%s", choice);
39、; if(strncmp(choice,"dir",3)=0|strncmp(choice,"DIR",2)=0)
40、0; dirfun(sClient); continue; else if(strncmp(choice
41、,"pwd",3)=0|strncmp(choice,"PWD",3)=0) pwdfun(sClient);
42、160; continue; else if(strncmp(choice,"?",1)=0)
43、160; usafun(sClient); c
44、ontinue; else if(strncmp(choice,"quit",4)=0|strncmp(choice,"QUIT",2)=0)
45、0; break;
46、scanf("%s", choice2); if(strncmp(choice,"get",3)=0|strncmp(choice,"GET",3)=0)
47、 getfun(sClient,choice2); continue;
48、 else if(strncmp(choice,"put",3)=0|strncmp(choice,"PUT",3)=0)
49、160; putfun(sClient,choice2); continue;
50、160; else if(strncmp(choice,"cd",2)=0|strncmp(choice,"CD",2)=0)
51、 cdfun(sClient,choice2); continue; &
52、#160; else if(strncmp(choice,"md",2)=0|strncmp(choice,"MD",2)=0) mdfun(sClient,choice2)
53、; continue; else if(strncmp(choice,
54、"del",3)=0|strncmp(choice,"DEL",3)=0) delfun(sClient,choice2); &
55、#160; continue; /else puts("输入错误,请重新输入&quo
56、t;); fflush(stdin); fflush(stdin); printf("n"); printf("n");
57、60; closesocket(sClient); WSACleanup(); return 0;int dirfun(SOCKET sClient) int ret; char *MSG="dir$"char szBuffer80;
58、0; strcpy(szMessage, MSG); ret = send(sClient, szMessage, strlen(szMessage), 0); if (ret = 0) re
59、turn 1; else if (ret = SOCKET_ERROR) printf("send() failed: %dn", WSAGetLastError(); &
60、#160; return 1; /printf("Send %d bytesn", ret); /printf("bSendOnly=%dn",bSendOnly); while(!bSendOnl
61、y) /读取流并显示 /ret = recv(sClient, szBuffer, 80, 0);
62、60; /printf("%s",szBuffer); ret = recv(sClient, szBuffer, 80, 0); if (ret = 0)
63、160; / Graceful close return 1; else if (ret = SOCKET_ERROR)
64、 printf("recv() failed: %dn", WSAGetLastError(); return 1;
65、60; szBufferret = '0'
66、0; if(strncmp(szBuffer,"226 Close",strlen("226 Close")=0)
67、; break; printf("%s",szBuffer);
68、 if(strncmp(szBuffer,"500 Syntax error",strlen("500 Syntax error")=0)
69、 break; return 0;int getfun(SOCKET sClient,char fil
70、ename40) int ret; FILE *fpre; char szBuffer80; szMessage0='0'
71、160; strcat(szMessage, "get$"); /strcat(szMessage, ""); strcat(szMessage,filename); /printf("MSG4=%cn",szMessage4);
72、; /szMessage0='g'szMessage1='e'szMessage2='t' / /szMessage4='m'szMessage5='e&
73、#39;szMessage6='.'szMessage7='t' / /szMessage8='x'szMessage9='t'szMessage10='0' ret = send(sClient, szMessage, strlen(szMe
74、ssage)+1, 0); if (ret = 0) return 1; else if (ret = SOCKET_ERROR)
75、 printf("send() failed: %dn", WSAGetLastError(); return 1; printf("Send %d bytesn", ret);
76、0; ret = recv(sClient, szBuffer, 80, 0); /*if (ret = 0) / Graceful close break;
77、; else if (ret = SOCKET_ERROR) printf("recv() failed: %dn", WSAGetLastError(); &
78、#160; break; */ szBufferret = '0' printf("%sn",szBuffer); if(strncmp( szBuffer,"125 T
79、ransfering.",strlen("125 Transfering.") )=0) if( (fpre=fopen(filename,"w") = NULL )
80、; printf("open errer"); return 1;
81、0; printf("bSendOnly=%dn",bSendOnly); while(!bSendOnly)
82、 /读取流并显示 ret = recv(sClient, szBuff
83、er, 80, 0); if (ret = 0) / Graceful close &
84、#160; return 1; else if (ret = SOCKET_ERROR)
85、60; printf("recv() failed: %dn", WSAGetLastError();
86、; return 1; szBufferret = '0'
87、0; /printf("%s",szBuffer);
88、0; if(strncmp(szBuffer,"226 Transfer",strlen("226 Transfer")=0)
89、 break;
90、0; if(strncmp(szBuffer,"500 Syntax error",strlen("500 Syntax error")=0)
91、0; break; fprintf(fpre,
92、"%s",szBuffer); printf("%sn",szBuffer); fclos
93、e(fpre); return 0;int putfun(SOCKET sClient,char filename40) int ret;/int i; FILE *fpse;/char *filename;
94、60; /char *MSG="get0me.txt" char szBuffer80,temp_buffer80; /sprintf(szMessage, "get0","te.txt0");
95、0; szMessage0='0' strcat(szMessage, "put$"); strcat(szMessage,filename); ret = send(sClient, szMessage, strl
96、en(szMessage)+1, 0); if (ret = 0) return 0; else if (ret = SOCKET_ERROR)
97、; printf("send() failed: %dn", WSAGetLastError(); return 1; /printf("Send %d bytesn", ret);
98、160; /filename="me.txt" printf("filename=%sn",filename); if( (fpse=fopen(filename,"r") = NULL ) &
99、#160; printf("open errer"); return 1;
100、; else printf("The file %s found,ready to transfer.n",filename); /i=0;
101、60; while (fgets(temp_buffer,80,fpse)!=NULL) sprintf(
102、szBuffer,"%s",temp_buffer); send(sClient, szBuffer, 80, 0); &
103、#160; sprintf(szBuffer, "226 Transfer completed. rn"); ret = send(sClient, szBuffer, strlen(szBuffer), 0); fclose(fpse);
104、 return 0;int pwdfun(SOCKET sClient) int ret; char *MSG="pwd$" char szBuffer160; strcpy(szMessage, MSG); ret = send(sClien
105、t, szMessage, strlen(szMessage), 0); if (ret = 0) return 1; else if (ret = SOCKET_ERROR) printf
106、("send() failed: %dn", WSAGetLastError(); return 1; printf("Send %d bytesn", ret); printf("bSendOnly=%dn",bSendOn
107、ly); while(!bSendOnly) /读取流并显示 ret = recv(sClient, szBuffer, 160, 0); if (ret
108、 = 0) / Graceful close return 1; else if (ret = SOCKET_ERROR)
109、0; printf("recv() failed: %dn", WSAGetLastError(); return 1; szBufferret = '0'
110、; printf("%sn",szBuffer); if(strncmp(szBuffer,"226 Close",strlen("226 Close")=0)
111、60; break; if(strncmp(szBuffer,"500 Syntax error",strlen("500 Syntax error")=0) &
112、#160; break; return 0;int cdfun(SOCKET sClient,char pathname40) int ret;
113、60; szMessage0='0' strcat(szMessage, "cd$"); strcat(szMessage,pathname); ret = send
114、(sClient, szMessage, strlen(szMessage)+1, 0); if (ret = 0) return 1; else if (ret = SOCKET_ERROR)
115、0; printf("send() failed: %dn", WSAGetLastError(); return 1; printf("Send %d byt
116、esn", ret); return 0;int mdfun(SOCKET sClient,char pathname20) int ret;char szBuffer160; /char *MSG="md$" szMessage0='0' strcat(szMe
117、ssage, "md$"); /strcat(szMessage, ""); strcat(szMessage,pathname); /strcpy(szMessage, MSG); ret = send(sClient, szMessage, strlen(
118、szMessage)+1, 0); if (ret = 0) return 1; else if (ret = SOCKET_ERROR)
119、160; printf("send() failed: %dn", WSAGetLastError(); return 1; printf("Send %d bytesn", ret);
120、 while(!bSendOnly) /读取流并显示 ret = r
121、ecv(sClient, szBuffer, 80, 0); if (ret = 0) / Graceful close return 1;
122、160; else if (ret = SOCKET_ERROR) printf("recv() failed: %dn", WSAGetLastError();
123、0; return 1; szBufferret = '0'
124、160; printf("%s",szBuffer); if(strncmp(szBuffer,"226 Close&qu
125、ot;,strlen("226 Close")=0) break;
126、0; if(strncmp(szBuffer,"500 Syntax error",strlen("500 Syntax error")=0)
127、60; break;
128、; return 0;int delfun(SOCKET sClient,char name20) int ret;char szBuffer80; szMessage0='0' strcat(szMessage, "del$"); strcat(szMessage,name); ret = send(sCli
129、ent, szMessage, strlen(szMessage)+1, 0); if (ret = 0) return 1; else if (ret = SOCKET_ERROR) printf("send() failed: %dn", WSAGe
130、tLastError(); return 1; printf("Send %d bytesn", ret); while(!bSendOnly) ret = recv(sClient, szBuffer,
131、 80, 0); if (ret = 0) / Graceful close return 1; else if (ret = SOCKET_ERROR) &
132、#160; printf("recv() failed: %dn", WSAGetLastError(); return 1;
133、0; szBufferret = '0' if(strncmp(szBuffer,"del ok",strlen(&
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年上海电机学院单招职业倾向性测试题库含答案详解(典型题)
- 2026年临汾职业技术学院单招职业倾向性测试题库附答案详解(基础题)
- 2026年云南城市建设职业学院单招职业倾向性考试题库带答案详解(培优a卷)
- 2026年上海中医药大学单招职业技能考试题库及答案详解(网校专用)
- 2026年上海立信会计金融学院单招职业技能考试题库带答案详解(黄金题型)
- 2026年三亚中瑞酒店管理职业学院单招职业技能测试题库带答案详解(新)
- 粘钢加固施工安全分析
- 聚氨酯泡沫塑料预制保温管施工组织设计
- 电梯大修投标施工技术方案
- 乳胶漆工厂耗材管理制度
- 智能网联汽车感知技术与应用 课件 任务3.1 视觉感知技术应用
- 9.个体工商户登记(备案)申请书
- 工程咨询行业发展规划方案范文
- 2025年汉语桥的考试题目及答案
- 《TCSUS69-2024智慧水务技术标准》
- 1.1中国的疆域课件-八年级地理上学期湘教版-1
- 收费站消防安全线上培训课件
- 【语文】贵州省贵阳市实验小学小学二年级上册期末试卷
- 妇科单孔腹腔镜手术专家共识(2025版)解读 4
- 海洋碳汇交易机制-洞察及研究
- 文件与记录管理制度
评论
0/150
提交评论