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

上传人:b****6 文档编号:7414707 上传时间:2023-01-23 格式:DOCX 页数:33 大小:21.87KB
下载 相关 举报
FTP客户端和服务器源代码C语言实现.docx_第1页
第1页 / 共33页
FTP客户端和服务器源代码C语言实现.docx_第2页
第2页 / 共33页
FTP客户端和服务器源代码C语言实现.docx_第3页
第3页 / 共33页
FTP客户端和服务器源代码C语言实现.docx_第4页
第4页 / 共33页
FTP客户端和服务器源代码C语言实现.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

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

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

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

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

课程设计:

FTP的设计与实现

/****************client.c****************/

*include

*include

*include

*pragmament(lib,"ws2_32.lib")

*defineDEFAULT_PORT       2302

*defineDEFAULT_BUFFER     2048

*defineDEFAULT_MESSAGE    "Thisisatestoftheemergency\broadcastingsystem"

char szServerip[128],         //Servertoconnectto

     szMessage[1024];       //Messagetosendtosever

int  iPort    =DEFAULT_PORT; //Portonservertoconnectto

//DWORDdwCount  =DEFAULT_COUNT;//Numberoftimestosendmessage

BOOL bSendOnly=FALSE;        //Senddataonly;don'treceive

intdirfun();

intgetfun();

intputfun();

intpwdfun();

intcdfun();

intmdfun();

intdelfun();

intusafun();

voidusage()

{

   printf("usage:

client[-p:

*][-s:

IP][-n:

*][-o]\n\n");

   printf("      -p:

*     Remoteporttosendto\n");

   printf("      -s:

IP    Server'sIPaddressorhostname\n");

   printf("      -n:

*     Numberoftimestosendmessage\n");

   printf("      -o       Sendmessagesonly;don'treceive\n");

   E*itProcess

(1);

}

voidValidateArgs(intargc,char**argv)

{

int               i;

for(i=1;i

   {

if((argv[i][0]=='-')||(argv[i][0]=='/'))

       {

switch(tolower(argv[i][1]))

           {

case'p':

       //Remoteport

if(strlen(argv[i])>3)

                       iPort=atoi(&argv[i][3]);

break;

case's':

      //Server

if(strlen(argv[i])>3)

                       strcpy(szServerip,&argv[i][3]);

break;

case'n':

      //Numberoftimestosendmessage

if(strlen(argv[i])>3)

//dwCount=atol(&argv[i][3]);

break;

case'o':

      //Onlysendmessage;don'treceive

                   bSendOnly=TRUE;

break;

default:

                   usage();

break;

           }

       }

   }

}

intmain(intargc,char**argv)

{

   WSADATA      wsd;

   SOCKET       sClient;

char         szBuffer[DEFAULT_BUFFER];

int          ret;

//unsignedint          i;

//intj;

structsockaddr_inserver;

structhostent   *host=NULL;

charchoice[5],choice2[40];

//ParsethemandlineandloadWinsock

//

    argv[1]="-s:

127.0.0.1";

    strcpy(szServerip,&argv[1][3]);

//ValidateArgs(argc,argv);

if(WSAStartup(MAKEWORD(2,2),&wsd)!

=0)

   {

       printf("FailedtoloadWinsocklibrary!

\n");

return1;

   }

//strcpy(szMessage,DEFAULT_MESSAGE);

//

//Createthesocket,andattempttoconnecttotheserver

//

   sClient=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

if(sClient==INVALID_SOCKET)

   {

       printf("socket()failed:

%d\n",WSAGetLastError());

return1;

   }

   server.sin_family=AF_INET;

   server.sin_port=htons(iPort);

    printf("server.sin_port=%u\n",server.sin_port);

   server.sin_addr.s_addr=inet_addr(szServerip);

//

//Ifthesuppliedserveraddresswasn'tintheform

//"aaa.bbb.ccc.ddd"it'sahostname,sotrytoresolveit

//

if(server.sin_addr.s_addr==INADDR_NONE)

   {

       host=gethostbyname(szServerip);

if(host==NULL)

       {

           printf("Unabletoresolveserver:

%s\n",szServerip);

return1;

       }

       CopyMemory(&server.sin_addr,host->h_addr_list[0],

           host->h_length);

   }

if(connect(sClient,(structsockaddr*)&server,

sizeof(server))==SOCKET_ERROR)

   {

       printf("connect()failed:

%d\n",WSAGetLastError());

return1;

   }

//显示接通信息

//

//

//for(j=0;j<2;j++)

//

    {

           ret=recv(sClient,szBuffer,DEFAULT_BUFFER,0);

if(ret==0)       //Gracefulclose

return0;

elseif(ret==SOCKET_ERROR)

           {

               printf("recv()failed:

%d\n",WSAGetLastError());

return0;

           }

           szBuffer[ret]='\0';

             printf("%s\n",szBuffer);

if(ret<15)

             {

                  ret=recv(sClient,szBuffer,DEFAULT_BUFFER,0);

if(ret==0)       //Gracefulclose

return0;

elseif(ret==SOCKET_ERROR)

                  {

//printf("recv()failed:

%d\n",WSAGetLastError());

return0;

                  }

                  szBuffer[ret]='\0';

                  printf("%s\n",szBuffer);

             }

//printf("DEFAULT_BUFFER=%d\n",DEFAULT_BUFFER);

    }

while

(1)

    {   

        puts("------------------------------------------");

        printf("ftp>");

        scanf("%s",choice);

if(strncmp(choice,"dir",3)==0||strncmp(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||strncmp(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,choice2);

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();

return0;

}

intdirfun(SOCKETsClient)

{

intret;

char*MSG="dir$";charszBuffer[80];

        strcpy(szMessage,MSG);

        ret=send(sClient,szMessage,strlen(szMessage),0);

if(ret==0)

return1;

elseif(ret==SOCKET_ERROR)

       {

           printf("send()failed:

%d\n",WSAGetLastError());

return1;

       }

//printf("Send%dbytes\n",ret);

//printf("bSendOnly=%d\n",bSendOnly);

while(!

bSendOnly)

       {

//读取流并显示        

//ret=recv(sClient,szBuffer,80,0);

//printf("%s",szBuffer);

           ret=recv(sClient,szBuffer,80,0);

if(ret==0)       //Gracefulclose

return1;

elseif(ret==SOCKET_ERROR)

           {

               printf("recv()failed:

%d\n",WSAGetLastError());

return1;

           }

           szBuffer[ret]='\0';

if(strncmp(szBuffer,"226Close",strlen("226Close"))==0)

             {

break;

             }

             printf("%s",szBuffer);

if(strncmp(szBuffer,"500Synta*error",strlen("500Synta*error"))==0)

             {

break;

             }

        }

return0;

}

intgetfun(SOCKETsClient,charfilename[40])

{

intret;

        FILE*fpre;

charszBuffer[80];

        szMessage[0]='\0';

        strcat(szMessage,"get$");

//strcat(szMessage,"\\");

        strcat(szMessage,filename);

//printf("MSG[4]=%c\n",szMessage[4]);

//szMessage[0]='g';szMessage[1]='e';szMessage[2]='t';

//

//szMessage[4]='m';szMessage[5]='e';szMessage[6]='.';szMessage[7]='t';

//

//szMessage[8]='*';szMessage[9]='t';szMessage[10]='\0';

       ret=send(sClient,szMessage,strlen(szMessage)+1,0);

if(ret==0)

return1;

elseif(ret==SOCKET_ERROR)

       {

           printf("send()failed:

%d\n",WSAGetLastError());

return1;

       }

       printf("Send%dbytes\n",ret);

        ret=recv(sClient,szBuffer,80,0);

/*if(ret==0)       //Gracefulclose

               break;

        elseif(ret==SOCKET_ERROR)

        {

             printf("recv()failed:

%d\n",WSAGetLastError());

             break;

        }*/

       szBuffer[ret]='\0';

        printf("%s\n",szBuffer);

if(strncmp(szBuffer,"125Transfering...",strlen("125Transfering..."))==0)

        {

if((fpre=fopen(filename,"w"))==NULL)

             {

                  printf("openerrer");

return1;

             }

             printf("bSendOnly=%d\n",bSendOnly);

while(!

bSendOnly)

             {

//读取流并显示

                  ret=recv(sClient,szBuffer,80,0);

if(ret==0)       //Gracefulclose

return1;

elseif(ret==SOCKET_ERROR)

                  {

                      printf("recv()failed:

%d\n",WSAGetLastError());

return1;

                  }

                  szBuffer[ret]='\0';

//printf("%s",szBuffer);            

if(strncmp(szBuffer,"226Transfer",strlen("226Transfer"))==0)

                  {

break;

                  }

if(strncmp(szBuffer,"500Synta*error",strlen("500Synta*error"))==0)

                  {

break;

                  }

                  fprintf(fpre,"%s",szBuffer);

             }

             printf("%s\n",szBuffer);

             fclose(fpre);

        }

return0;

}

intputfun(SOCKETsClient,charfilename[40])

{

intret;//inti;

        FILE*fpse;//char*filename;

//char*MSG="get\0me.t*t";

charszBuffer[80],temp_buffer[80];

//sprintf(szMessage,"get\0","te.t*t\0");

        szMessage[0]='\0';

        strcat(szMessage,"put$");

        strcat(szMessage,filename);

       ret=send(sClient,szMessage,strlen(szMessage)+1,0);

if(ret==0)

return0;

elseif(ret==SOCKET_ERROR)

       {

           printf("send()failed:

%d\n",WSAGetLastError());

return1;

       }

//printf("Send%dbytes\n",ret);

//filename="me.t*t";

        printf("filename=%s\n",filename);

if((fpse=fopen(filename,"r"))==NULL)

        {

             printf("openerrer");

return1;

        }

else

        {

             printf("Thefile%sfound,readytotransfer.\n",filename);

//i=0;

while

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1