您的位置:软件 > 开发者网络 > 开发工具 > 开发专栏 > VC > 正文
VC中利用FTP协议实现多线程断点续传
[文章信息]
作者:吴康彬
时间:2005-01-29
出处:vckbase
责任编辑:方舟
[文章导读]
用socket根据FTP协议来开发将会变的十分灵活。下面我就逐步的讲解整个开发的过程……
advertisement
热点推荐
· PS色彩调整简明教程:色阶
· 春节将至 专家教你4招保障电脑安全
· 在Eclipse中使用ANT灵活构建Web应用
· 邮箱及IE安全设置指南
· 配置Win 2000系统中的磁盘配额
[正文]

1 2  下一页

  下载本文源代码

  FTP下载的好处我在这里就不多说了,许多工程会把FTP下载作为一个重要的功能来实现。微软提供的WinInet类可以利用下面这些函数:

InternetOpen;
InternetConnect;
GetCurrentDirectory;
SetCurrentDirectory;
FTPGetFile;

  很容易实现FTP的下载,网上关于这方面的文章也很多。但是要实现FTP的多线程下载,利用这些函数就显得有些牵强了。用socket根据FTP协议来开发将会变的十分灵活。下面我就逐步的讲解整个开发的过程:开发环境 BCB(组件模式),VC 环境下请自行稍作改动。看了这篇文章后对于BCB开发人员来说,不仅可以对 FlashGet 等软件的开发原理有一定的了解,特别是在开发组件方面也有很大的指导作用,请耐心的将它看完。很简单!! 首先介绍一下部分FTP协议:


图一 FTP服务示意图

  用户FTP和服务器FTP之间要传送文件,需要有两个连接:命令通道和数据连接,从名字上就可以看出命令通道是传送命令的,数据通道是用于传送文件。服务器与服务器之间的数据传送在此就不多作解释。

  主要用到的命令为:USER,PASS,TYPE,SIZE,REST,CWD,PWD,RETR,PASV,PORT,QUIT;

  USER:参数是标记用户的Telnet串。用户标记是访问服务器必须的,此命令通常是控制连接后第一个发出的命令,有些主机还会要求口令和帐户。服务器可以在任何时间接收新的USER命令以改变访问控制和(或)帐户信息。这可以重新开始登录过程,所以传输参数不变,在进行中的文件传输在过去的访问控制参数下完成。

  PASS:参数是标记用户口令的Telnet串。此命令紧跟USER命令,在某些站点它是完成访问控制不可缺少的一步。因此口令是个重要的东西,因此不能显示出来,服务器方没有办法隐藏口令,所以这一任务得由用户FTP进程完成。
TYPE:参数指定表示类型。有些类型需要第二个参数,第一个参数由单个Telnet字符定义,第二个参数是十进制整数指定字节大小,参数间以<SP>分隔。下面是格式:


图二 TYPE参数示意图

  默认表示类型是ASCII非打印字符,如果参数未改变,以后只改变了第一个参数,则使用默认值。

  SIZE:参数从FTP服务器上返回指定文件的大小。

  REST:参数域代表服务器要重新开始的那一点,此命令并不传送文件,而是略过指定点后的数据,此命令后应该跟其它要求文件传输的FTP命令。

  CWD:此命令使用户可以在不同的目录或数据集下工作而不用改变它的登录或帐户信息。传输参数也不变。参数一般是目录名或与系统相关的文件集合。

  PWD:改变当前的工作目录。

  RETR:开始传送指定的文件。(从REST参数指定的偏移量开始传送)

  PASV:此命令要求服务器DTP在指定的数据端口侦听,进入被动接收请求的状态,参数是主机和端口地址。

  PORT:参数是要使用的数据连接端口,通常情况下对此不需要命令响应。如果使用此命令时,要发送32位的IP地址和16位的TCP端口号。上面的信息以8位为一组,逗号间隔十进制传输。

  QUIT:退出登录。

  各个参数的具体用法举例如下:

  USER sandy \r\n //用户名为sandy登录PASS sandy \r\n //密码为sandyTYPE I \r\n SIZE sandy.txt \r\n //如果sandy.txt文件存在,则返回该文件的大小REST 100 \r\n //重新指定文件传送的偏移CWD infor/ \r\n //获取当前的工作目录 PWD temp/ \r\n //改变当前的工作目录 RETR \r\n //开始传送文件 PASV \r\n //进入被动模式 PORT h1,h2,h3,h4,p1,p2 \r\n //进入主动模式,h1,h2,h3,h4为ip地址的4个部分。p1,p2是16进制的端口号。

  下面介绍一下各个函数的使用顺序和一些应注意的地方:

  使用这些命令的前提条件是客户端和服务器端建立了连接。比如FTP服务器地址:192.168.1.81 ,端口:21。那么利用Winsock的API函数建立socket连接,然后使用USER,PASS登陆FTP服务器.需要下载文件,要确保文件必须在当前工作目录下,可以使用命令CWD和PWD。查看和更改当前的工作目录。使用SIZE命令获取文件的大小。我们想要多线程下载那么就要求服务器支持该功能。一般我们都会在开头先使用REST命令判断该FTP站点是否支持多线程下载。PORT和PASV两个命令是用来建立数据连接的。他们的主要区别是:PORT需要你指定一个ip地址和端口与服务器建立连接。PASV命令服务器会返回h1,h2,h3,h4,p1,p2样式 的数据供客户端连接。等数据连接建立后,就可以了使用REST,RETR进行多线程和断点续传文件下载了。


1 2  下一页

天极社区邀请您:写博客日记  上传相片   论坛聊天  订阅电子杂志  推荐网摘   免费图铃工具
笔名:   请您注意:

 遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。

 天极网拥有管理笔名和留言的一切权利。
评论:
 
发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
相关内容焦点新闻
  • 防止Visual C++应用程序缓冲区溢出
  • MFC程序员的WTL指南之WTL 界面基类
  • MFC程序员的WTL开发指南之ATL界面类
  • ATL布幔下的秘密之窗口类的秘密
  • ATL布幔下的秘密之底层技术和汇编
  • 如何突破中小企业实施ERP过程中的人力瓶颈
  • 中国搜索起诉8848 净化网络竞争环境
  • 新一代卫星手机面世 同时兼容GSM和卫星网络
  • 手机电视亮相美国 包月费15美元可浏览大片
  • 信息化动向:中小企业受益于零售行业软件
  • 网上银行安全事故频发 理财反恐已刻不容缓
  • 预测:2010年世界500强中国企业将占50席
  • 正版压缩DVD上市 发行价8到10元保证品质
  • Advertisement

    天极无线


    奇妙科幻|美好风光|清风车影|漫画卡通|星座生肖|明星写真|动物世界
    温馨祝福|极品爆笑|生肖属相|StarQ|体育竞技|美好风光|每逢佳节
    老鼠爱大米
    挥着翅膀的女孩
    女人味
    栀子花开
    白月光
    刚刚好
    江南
    快乐崇拜
    亲爱的你怎么不在我身边
    小薇
    2002年的第一场雪
    有多少爱可以重来
    我的地盘
    七里香
    情人
     
    老鼠爱大米 冲动的惩罚
    最熟悉的陌生人 绿光
    可爱女人 盛夏的果实
    当你孤单你会想起谁 孤单北半球
    2002年的第一场雪 眉飞色舞
    有多少爱可以重来 挪威的森林
    最浪漫的事 老板电话

    CSEEK搜索