文件传输协议的简单设计与实现c语言.docx

上传人:b****7 文档编号:25760098 上传时间:2023-06-13 格式:DOCX 页数:42 大小:23.30KB
下载 相关 举报
文件传输协议的简单设计与实现c语言.docx_第1页
第1页 / 共42页
文件传输协议的简单设计与实现c语言.docx_第2页
第2页 / 共42页
文件传输协议的简单设计与实现c语言.docx_第3页
第3页 / 共42页
文件传输协议的简单设计与实现c语言.docx_第4页
第4页 / 共42页
文件传输协议的简单设计与实现c语言.docx_第5页
第5页 / 共42页
点击查看更多>>
下载资源
资源描述

文件传输协议的简单设计与实现c语言.docx

《文件传输协议的简单设计与实现c语言.docx》由会员分享,可在线阅读,更多相关《文件传输协议的简单设计与实现c语言.docx(42页珍藏版)》请在冰豆网上搜索。

文件传输协议的简单设计与实现c语言.docx

文件传输协议的简单设计与实现c语言

文件传输协议的简单设计与实现(c语言,VC6.0)

使用Socket进行Client/Server程序设计的一般连接过程是这样的:

Server端Listen(监听)某个端口是否有连接请求,Client端向Server端发出Connect(连接)请求,Server端向Client端发回Accept(接受)消息。

一个连接就建立起来了。

Server端和Client端都可以通过Send,Write等方法与对方通信。

  对于一个功能齐全的Socket,都要包含以下基本结构,其工作过程包含以下四个基本的步骤:

  

(1)创建Socket;

  

(2)打开连接到Socket的输入/出流;

  (3)按照一定的协议对Socket进行读/写操作;

  (4)关闭Socket.

  第三步是程序员用来调用Socket和实现程序功能的关键步骤,其他三步在各种程序中基本相同。

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

#include

#include

#include

#pragmacomment(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:

x][-s:

IP][-n:

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

   printf("      -p:

x     Remoteporttosendto\n");

   printf("      -s:

IP    Server'sIPaddressorhostname\n");

   printf("      -n:

x     Numberoftimestosendmessage\n");

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

   ExitProcess

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

   //ParsethecommandlineandloadWinsock

   //

    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,"500Syntaxerror",strlen("500Syntaxerror"))==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]='x';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("125Tr

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

当前位置:首页 > 经管营销 > 销售营销

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

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