龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

VC中ftp协议实现多线程断点续传[组图](2)

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
默认表示类型是ASCII非打印字符,如果参数未改变,以后只改变了第一个参数,则使用默认值。 SIZE:参数从FTP服务器上返回指定文件的大小。 REST:参数域代

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

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

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

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

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

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

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

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

  QUIT:退出登录。

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

USER sandy //用户名为sandy登录
PASS sandy //密码为sandy
TYPE I
SIZE sandy.txt //如果sandy.txt文件存在,则返回该文件的大小
REST 100 //重新指定文件传送的偏移
CWD infor/ //获取当前的工作目录
PWD temp/ //改变当前的工作目录
RETR //开始传送文件
PASV //进入被动模式
PORT h1,h2,h3,h4,p1,p2 //进入主动模式,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。因为要断点续传,所以 在下载的过程中必须得保存文件的大小,已经下载的文件的大小和各个线程的任务。

  有两种方法:

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

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

精彩图集

赞助商链接