当前位置:  技术问答>linux和unix

求ftp客户端的源代码 unix环境

    来源: 互联网  发布时间:2015-11-12

    本文导语:  如题 | //====================================================== // cc -o ftpc ftpc.c -lsocket //====================================================== #include "ftp.h" static struct sockaddr_in ftp_server, local_host; static int toflag...

如题

|
//======================================================
// cc -o ftpc ftpc.c -lsocket
//======================================================

#include "ftp.h"

static struct sockaddr_in ftp_server, local_host;

static int toflag;
static int port = DEFAULT_FTP_PORT;

//TIMEOUT single proc
static _alarmproc()
{
  signal( SIGALRM, _alarmproc );
  toflag = 1;
}

/************************* ftp private func **************************/
static int _filladdr(const char *host_ip_addr, struct sockaddr_in *host, int port)
{
  struct hostent * server_hostent;

  if(port  65535) return -1;
  bzero(host, sizeof(struct sockaddr_in));
  host->sin_family = AF_INET;
  if(inet_addr(host_ip_addr) != -1)
  {
    host->sin_addr.s_addr = inet_addr(host_ip_addr);
  }
  else
  {
    if ((server_hostent = gethostbyname(host_ip_addr)) != 0)
    {
      memcpy(&host->sin_addr, server_hostent->h_addr,
      sizeof(host->sin_addr));
    }
    else return -1;
  }
  host->sin_port = htons(port);

  return 0;
}

static int _connect(struct sockaddr_in *sockad, int *sockid)
{
  int sock,i;

  sock = socket( AF_INET,SOCK_STREAM,IPPROTO_TCP );
  if ( sock sockfd = -1;
  } else {
    close(ftpinfo->datasd);
    ftpinfo->datasd = -1;
  }
  ftpinfo->reply = -1;
  if ( (ftpinfo->filedes != stdin) && (ftpinfo->filedes != stdout) ) {
    fclose(ftpinfo->filedes);
    ftpinfo->filedes = NULL;
  }
}

static int _retuerr(FTPINFO *ftpinfo, char type, char *errmsg)
{
  _closesock(ftpinfo, type);
  strcpy(ftpinfo->ftp_msg, errmsg);

  return -1;
}

//get the server's reply message from sock_fd
static int _getreply(FTPINFO *ftpinfo)
{
  int count = 0;
  char rcv_buf[512];

  sprintf(ftpinfo->ftp_msg, "");

  signal( SIGALRM, _alarmproc ); alarm( TIMEOUT ); toflag = 0;
  count=read(ftpinfo->sockfd, rcv_buf, 510);
  alarm( 0 );
  if ( toflag ) {
    return( _retuerr(ftpinfo, 'C', "_getreply.read errorrn") );
  }
  if(count > 0)
    ftpinfo->reply = atoi(rcv_buf);
  while(1)
  {
    if(count ftp_msg)+strlen(rcv_buf) ftp_msg) )
      strcat(ftpinfo->ftp_msg, rcv_buf);
    if ( rcv_buf[count-1] == 'n' ) break;
    signal( SIGALRM, _alarmproc ); alarm( TIMEOUT ); toflag = 0;
    count=read(ftpinfo->sockfd, rcv_buf, 510);
    alarm( 0 );
    if ( toflag ) {
      return( _retuerr(ftpinfo, 'C', "_getreply.read errorrn") );
    }
  }

  return 0;
}

static int _sendcmd(FTPINFO *ftpinfo, const char *option, const char *action)
{
  char send_buf[256];
  int send_err, len;

  if ( option[0] != '' )
    sprintf(send_buf, "%s %s", action, option);
  else
    sprintf(send_buf, "%s", action);
  strcat(send_buf,"rn");
  len = strlen(send_buf);
  signal( SIGALRM, _alarmproc ); alarm( TIMEOUT ); toflag = 0;
  send_err = send(ftpinfo->sockfd, send_buf, len, 0);
  alarm( 0 );
  if ( toflag ) {
    return( _retuerr(ftpinfo, 'C', "ftp_command.send errorrn") );
  }

  return(0);
}

static int _getlocaport()
{
  int local_port;
  srand((unsigned)time(NULL));
  local_port = rand() % 40000 + 1025;
  return local_port;
}

static void _initftpinfo(FTPINFO *ftpinfo)
{
  ftpinfo->filedes     = NULL;
  ftpinfo->transf_type = BINARY;
  ftpinfo->transf_mode = PASV;
  strcpy(ftpinfo->ftp_msg, "");
  ftpinfo->transf_calc = 0;
  ftpinfo->sockfd      = -1;
  ftpinfo->datasd      = -1;
  ftpinfo->reply       = 0;
  ftpinfo->debug       = 0;
  ftpinfo->linger      = 0;
  ftpinfo->connected   = 0;
  ftpinfo->ftp_sp      = NULL;
}

/************************  ftp pub func ****************************/
int ftp_setport(const int portnumber)
{
  port = portnumber;

  return 0;
}

int ftp_prconnect(FTPINFO *ftpinfo, const char *remhost)
{
  int sockid;

  _initftpinfo(ftpinfo);
  ftpinfo->reply = -1;
  strcpy(ftpinfo->ftp_msg, "ftp_prconnect errorrn");

  if ( _filladdr(remhost, &ftp_server, port) reply = 0;
  if ( _getreply(ftpinfo) reply != 220 ) return -1;

  return 0;
}

int ftp_command(FTPINFO *ftpinfo,const char *optinfo, const char *action)
{
  if ( _sendcmd(ftpinfo, optinfo, action) reply = -1;
  ftpinfo->datasd = -1;
  strcpy(ftpinfo->ftp_msg, "ftp_dataconn errorrn");

  if(ftpinfo->transf_mode)
  {
    int data_port;

    if ( ftp_pasv(ftpinfo, &data_port) 

    
 
 

您可能感兴趣的文章:

  • 关于ftp客户端的源代码?
  • 嵌入式Linux ftp源代码
  • (****非作业帖),求ftp客户/服务器c语言源代码.
  • 哭求在linux下用c语言编写的ftp上传文件的源代码!
  • 谁有linux下ftp客户端的源代码?
  • 谁给个C编写的完整的有注释的FTP源代码,我给300分
  • 谁有实现FTP服务的源代码?
  • 求 ftp客户端源代码
  • 哪里有VI和EMACS的源代码??我去GNU的FTP站点了,没找到,知道的朋友们,能不能告诉小弟一声,谢谢了!!!
  • 跪求:C语言的ftp的源代码,非常急用!100分马上送出
  • 可不可以在程序中直接使用ftp客户端的函数实现文件传输?
  • ftp服务器及客户端的相关问题
  • 我想写一个FTP客户端的软件,能否推荐几款软件作为参考?
  • linux下FTP服务器与客户端的C语言实现
  • 在shell脚本中如何使用FTP一次删除远端的多个文件?
  • 关于Linux定期上传文件到远端的WINDOWS FTP SERVER
  • ftp协议及vsftpd服务器端的改造
  • 自己完成ftp客户端的实现,怎么显示远程ftp站点的制定目录下的所有文件??
  • 如何保证ftp上传完一个文件后,服务器端的程序再处理.
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • FTP客户端 FTP Rush
  • 基于Web的FTP客户端 net2ftp
  • FTP客户端Java类库 ftp4j
  • Node.js 的 FTP 客户端 node-ftp
  • FTP!!!写一个简单FTP服务的服务器和客户端
  • 基于Web的FTP客户端 OurWebFTP
  • FTP客户端程序 JFtp
  • FTP客户端 CrossFTP
  • FTP passive模式下客户端口的选择
  • FTP 客户端软件 NovaFTP
  • 请大侠们帮忙实现FTP客户端!!
  • 求助:Linux下ftp客户端代码编写
  • aix ftp在客户端访问不了
  • 求助各位大侠:Linux下Ftp客户端程序编写
  • linux和unix iis7站长之家
  • 求FTP客户端源程序或相关资料(C,LINUX )
  • telnet下面如何支持文件传输?因为客户那边有安全需求,不允许用ftp和ssh
  • 纯C实现完整FTP客户端
  • Linux 下有没有FTP服务器支持客户端修改密码。。。
  • ftp/scp客户端如何限定超时?
  • java命名空间javax.print.attribute.standard类referenceurischemessupported的类成员方法: ftp定义及介绍
  • 用ftp命令连到ftp服务器后,在ftp提示符下用什么命令可以查看本地机器当前目录有哪些文件?
  • ftp协议介绍及ftp常用的上传下载等操作命令使用方法
  • 为什么会出现ftp: ftp/tcp: unknown service
  • 请问如何在Redhat7.1下安装Ftp服务,如何开启Ftp帐号????请教!!!急急急急急急
  • FTP匿名登陆 LINUX 出现错误 linux FTP 550 permission
  • ubuntu装好BUM后,看不到FTP服务,如何开启FTP服务?
  • 跨平台FTP服务器 Wing FTP Server
  • 如何在Red Hat上建立FTP服务 并且建立FTP一个用户
  • 请教一个跑shell连ftp时获取ftp返回值的问题
  • Crob FTP Server并发用户测试,免费开放FTP,欢迎参加


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3