正在阅读:VC中ftp协议实现多线程断点续传VC中ftp协议实现多线程断点续传

2005-09-19 10:16 出处: 作者:吴康彬 责任编辑:moningfeng

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

USER sandy \r\n //用户名为sandy登录
PASS sandy \r\n //密码为sandy
TYPE 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进行多线程和断点续传文件下载了。

  上面讲解了一点ftp下载的基本知识,下面主要介绍的是断点续传的文件保存技巧。

  若要讲断点续传的文件保存方式至少可以说出10种,但是各种方法都有利有弊,下面主要介绍一种我在工作中常常使用的一种文件保存方式:比如要下载一个364544字节的文件,文件名为:namelock.avi。因为要断点续传,所以 在下载的过程中必须得保存文件的大小,已经下载的文件的大小和各个线程的任务。

  有两种方法:

  一、可以产生两个文件:内容文件和配置文件。

  二、只需一个文件:把配置文件的数据加载到内容文件的末尾。

  这两个都不失为好方法。我使用的是前一种,因为我水平有限,(对于临界资源的访问总是不能做到互坼,老出问题。)。这里 的后缀名希望大家要把它放在心上,后缀名是个象征性的东西。就拿我们公司来说,拥有自己的MPEG编码、解码技术,比如原来5m的一首mp3歌曲,通过编码可以 转换成500K左右的.fun文件(funinhand的前三个字)。再利用我们自己的解码播放器边下载边解码边播放, 音质和mp3不相上下。真正实现了手机上的流媒体技术。受到国内外高科技大公司的信赖。(不好意思,这里有点像做广告了。)讲这些的另外一个企图是这样的:

  内容文件所使用的后缀名是我女朋友的英文名(namelock)的前三个字母.nam 。配置文件使用的是我自己的英文名(sandy)的前三个字母.san 。所以说写程序也可以很浪漫,因为这,女朋友又给了我的月生活零用钱增加了几元,哈哈(大家也可以效仿)。言归正传,这两个文件严格意义上来讲是临时文件,当文件下载完毕的时候,namelock.avi.nam内容文件应该改名为:namelock.avi。namelock.avi.san配置文件也应该及时的删除。
键盘也能翻页,试试“← →”键

关注我们

最新资讯离线随时看 聊天吐槽赢奖品