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

下载本文档

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

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论