⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ftp_client_source_unix.txt

📁 unix-linux环境下的ftp客户端源码
💻 TXT
📖 第 1 页 / 共 2 页
字号:
              bzero(&local,   sizeof(struct   sockaddr));                 #define     UC(b)     (((int)b)&0xff)                 if(   getsockname(ftpinfo->sockfd,(struct   sockaddr*)&local,\                       (socklen_t   *)&addr_len)   <   0   )   return   -1;                 a   =   (char   *)&(local.sin_addr);                 sprintf(local_ip,   "%d.%d.%d.%d",   UC(a[0]),   UC(a[1]),   UC(a[2]),   UC(a[3]));                 if(   getsockname(get_sock,(struct   sockaddr*)&local,\                       (socklen_t   *)&addr_len)   <   0   )   return   -1;                 p   =   (char   *)&(local.sin_port);                 local_port   =   UC(p[0])   *   256   +   UC(p[1]);             }             if   (   ftp_port(ftpinfo,   local_ip,   local_port)   <   0   )   {                 close(get_sock);                 return   -1;             }         }         ftpinfo->reply   =   0;         ftpinfo->datasd   =   get_sock;             return(0);     }         int   ftp_login(FTPINFO   *ftpinfo,const   char   *remhost,const                                 char   *user,const   char   *passwd,const   char   *account)     {         if   (   ftp_prconnect(ftpinfo,   remhost)   <   0   )   return   -1;         if   (   ftp_user(ftpinfo,   user)   <   0   )   return   -1;         if   (   ftp_passwd(ftpinfo,   passwd)   <   0   )   return   -1;         if   (   ftp_settype(ftpinfo,   BINARY)   <   0   )   return   -1;         if   (   ftp_setmode(ftpinfo,   PASV)   <   0   )   return   -1;             return(0);     }         int   ftp_setmode(FTPINFO   *ftpinfo,   const   int   mode)     {         ftpinfo->transf_mode   =   mode;     }         int   ftp_settype(FTPINFO   *ftpinfo,   const   int   type)     {         ftpinfo->transf_type   =   type;         if   (   type   ==   BINARY   )   {             if   (   ftp_command(ftpinfo,   "I",   "TYPE")   <   0   )   return   -1;         }   else   {             if   (   ftp_command(ftpinfo,   "A",   "TYPE")   <   0   )   return   -1;         }         if   (   ftpinfo->reply   !=   200   )   return   -1;             return   0;     }         int   ftp_recvdata(FTPINFO   *ftpinfo,   const   char   *localfile)     {         char   rcv_buf[512];         int   i,   sock_data,   new_sock,   count;         int   set   =   sizeof(local_host);             sprintf(ftpinfo->ftp_msg,   "");             sock_data   =   ftpinfo->datasd;         if(   ftpinfo->transf_mode   ==   PASV)   {             new_sock   =   sock_data;         }         else         {             i   =   0;             while(i   <   3)             {                 new_sock   =   accept(sock_data,   (struct   sockaddr   *)&local_host,   \                     (socklen_t   *)&set);                 if(new_sock   ==   -1)                 {                     i++;                     continue;                 }                 else   break;             }             if(new_sock   ==   -1)             {                 _closesock(ftpinfo,   'C');                 return(   _retuerr(ftpinfo,   'D',   "dataconn.accept   error\r\n")   );             }         }             if   (   ftpinfo->filedes   ==   NULL   )   {             if   (   (ftpinfo->filedes   =   fopen(localfile,   "wb"))   ==   NULL   )   {                 return(   _retuerr(ftpinfo,   'D',   "ftp_recvdata.open   localfile   error\r\n")   );             }         }         while(1)         {             signal(   SIGALRM,   _alarmproc   );   alarm(   TIMEOUT   );   toflag   =   0;             count   =   read(new_sock,   rcv_buf,   sizeof(rcv_buf));             alarm(   0   );             if   (   toflag   )   {                 return(   _retuerr(ftpinfo,   'D',   "ftp_recvdata.read   error\r\n")   );             }             if(count   <=   0)                 break;             else             {                 fwrite(rcv_buf,   count,   1,   ftpinfo->filedes);             }         }         close(new_sock);         _closesock(ftpinfo,   'D');             if   (   _getreply(ftpinfo)   <   0   )   return   -1;         if   (   ftpinfo->reply   !=   226   )   return   -1;             return   0;     }   int   ftp_senddata(FTPINFO   *ftpinfo,   const   char   *localfile)     {         char   send_buf[512];         int   i,   sock_data,   new_sock,   count;         int   set   =   sizeof(local_host);             sprintf(ftpinfo->ftp_msg,   "");             sock_data   =   ftpinfo->datasd;         if(   ftpinfo->transf_mode   ==   PASV)   {             new_sock   =   sock_data;         }         else         {             i   =   0;             while(i   <   3)             {                 new_sock   =   accept(sock_data,   (struct   sockaddr   *)&local_host,   \                     (socklen_t   *)&set);                 if(new_sock   ==   -1)                 {                     i++;                     continue;                 }                 else   break;             }             if(new_sock   ==   -1)             {                 _closesock(ftpinfo,   'C');                 return(   _retuerr(ftpinfo,   'D',   "dataconn.accept   error\r\n")   );             }         }             if   (   ftpinfo->filedes   ==   NULL   )   {             if   (   (ftpinfo->filedes   =   fopen(localfile,   "rb"))   ==   NULL   )   {                 return(   _retuerr(ftpinfo,   'D',   "ftp_senddata.open   localfile   error\r\n")   );             }         }         while(1)         {             count   =   fread(send_buf,   sizeof(send_buf),   1,   ftpinfo->filedes);             if(count   <=   0)                 break;             else             {                 signal(   SIGALRM,   _alarmproc   );   alarm(   TIMEOUT   );   toflag   =   0;                 write(new_sock,   send_buf,   sizeof(send_buf));                 alarm(   0   );                 if   (   toflag   )   {                     return(   _retuerr(ftpinfo,   'D',   "ftp_senddata.write   error\r\n")   );                 }             }         }         close(new_sock);         _close(ftpinfo,   'D');             if   (   _getreply(ftpinfo)   <   0   )   return   -1;         if   (   ftpinfo->reply   !=   226   )   return   -1;             return   0;     }         int   ftp_dir(FTPINFO   *ftpinfo,   const   char   *rempath,   const   char   *localpath)     {         if   (   ftp_dataconn(ftpinfo)   <   0   )   return   -1;         if   (   ftp_command(ftpinfo,   rempath,   "LIST")   <   0   )   {             _retuerr(ftpinfo,   'D',   NULL);         }         if   (   ftpinfo->reply   !=   150   )   {             return(   _retuerr(ftpinfo,   'D',   "ftp_command.LIST.reply   <>   150\r\n")   );         }         if   (   ftp_recvdata(ftpinfo,   localpath)   <   0   )   {             _retuerr(ftpinfo,   'D',   NULL);         }             return   0;     }         int   ftp_nlist(FTPINFO   *ftpinfo,   const   char   *rempath,   const   char   *localpath)     {         if   (   ftp_dataconn(ftpinfo)   <   0   )   return   -1;         if   (   ftp_command(ftpinfo,   rempath,   "NLST")   <   0   )   {             _retuerr(ftpinfo,   'D',   NULL);         }         if   (   ftpinfo->reply   ==   550   )   {             _closesock(ftpinfo,   'D');             return   0;         }         if   (   ftpinfo->reply   !=   150   )   {             return(   _retuerr(ftpinfo,   'D',   "ftp_command.LIST.reply   <>   150\r\n")   );         }         if   (   ftp_recvdata(ftpinfo,   localpath)   <   0   )   {             _retuerr(ftpinfo,   'D',   NULL);         }             return   0;     }         int   ftp_getfile(FTPINFO   *ftpinfo,   const   char   *rempath,   const   char   *localpath)     {         if   (   ftp_dataconn(ftpinfo)   <   0   )   return   -1;         if   (   ftp_command(ftpinfo,   rempath,   "RETR")   <   0   )   {             _retuerr(ftpinfo,   'D',   NULL);         }         if   (   ftpinfo->reply   !=   150   )   {             return(   _retuerr(ftpinfo,   'D',   "ftp_command.RETR.reply   <>   150\r\n")   );         }         if   (   ftp_recvdata(ftpinfo,   localpath)   <   0   )   {             _retuerr(ftpinfo,   'D',   NULL);         }             return   0;     }         int   ftp_putfile(FTPINFO   *ftpinfo,   const   char   *rempath,   const   char   *localpath)     {         if   (   ftp_dataconn(ftpinfo)   <   0   )   return   -1;         if   (   ftp_command(ftpinfo,   rempath,   "STOR")   <   0   )   {             _retuerr(ftpinfo,   'D',   NULL);         }         if   (   ftpinfo->reply   !=   150   )   {             return(   _retuerr(ftpinfo,   'D',   "ftp_command.STOR.reply   <>   150\r\n")   );         }         if   (   ftp_senddata(ftpinfo,   localpath)   <   0   )   {             _retuerr(ftpinfo,   'D',   NULL);         }             return   0;     }         int   ftp_pwd(FTPINFO   *ftpinfo)     {         if   (   ftp_command(ftpinfo,   NULL,   "PWD")   <   0   )   return   -1;         if   (   ftpinfo->reply   !=   257   )   return   -1;             return   0;     }         int   ftp_chdir(FTPINFO   *ftpinfo,   const   char   *rempath)     {         if   (   ftp_command(ftpinfo,   rempath,   "CWD")   <   0   )   return   -1;         if   (   ftpinfo->reply   !=   250   )   return   -1;             return   0;     }         int   ftp_del(FTPINFO   *ftpinfo,   const   char   *file)     {         if   (   ftp_command(ftpinfo,   file,   "DELE")   <   0   )   return   -1;         if   (   ftpinfo->reply   !=   250   )   return   -1;             return   0;     }         int   ftp_rena(FTPINFO   *ftpinfo,   const   char   *remsrcfile,   const   char   *remdstfile)     {         if   (   ftp_command(ftpinfo,   remsrcfile,   "RNFR")   <   0   )   return   -1;         if   (   ftpinfo->reply   !=   350   )   return   -1;         if   (   ftp_command(ftpinfo,   remdstfile,   "RNTO")   <   0   )   return   -1;         if   (   ftpinfo->reply   !=   250   )   return   -1;             return   0;     }         int   ftp_mkdir(FTPINFO   *ftpinfo,   const   char   *remdir)     {         if   (   ftp_command(ftpinfo,   remdir,   "MKD")   <   0   )   return   -1;         if   (   ftpinfo->reply   !=   257   )   return(-1);             return   0;     }         int   ftp_bye(FTPINFO   *ftpinfo)     {         if   (   ftp_command(ftpinfo,   NULL,   "QUIT")   <   0   )   return   -1;         if   (   ftpinfo->reply   !=   221   )   return(-1);             return   0;     }     

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -