如何实现断点传续的功能
编号:QA001872
建立日期: 1999年10月19日 最后修改日期:1999年10月19日
所属类别:
周星海:
VB5
WIN98&NT
VB可否实现类似吸血鬼的那种断点传续的功能?
回答:
当CuteFTP、GetRight软件刚刚问世的时候,我觉得断点续传非常神奇,它们肯定采用了什么高深的技术,不过认真一研究,发现也没有什么特别了不起的。断点续传的实质就是能在下载时自由指定下载的启始位置。
要实现FTP的断点续传,FTP服务器必须支持REST指令,这条指令在FTP协议文本RFC959中就已经定义了,不过它不是FTP服务器必须支持的指令。一般,你可以在下载前使用REST 100命令进行实验,如果服务器正常执行了这条命令,说明该服务器支持FTP断点续传。REST后面跟的数表示下载文件的起始位置,而REST 0表示从文件最开始处下载。REST命令本身并不执行下载功能,你仍需要使用RETR命令执行下载工作。
要实现HTTP断点续传,Web服务器必须支持HTTP/1.1(协议文本为RFC2068),当然也不是所有支持HTTP/1.1的服务器都实现了HTTP断点续传。一般在正常的Header之外,还要在Header中加上如下几句:
Connection: close
Host: www.host.com
Range: bytes=1-100
这里的Range就是指定下载范围,也可以使用"100-"表示从100开始下载。更详细的内容可以参见RFC2068。
上面介绍的是原理,现在一般编程都使用各种控件,所以实现的时候应该具体分析。绝大多数HTTP控件都允许用户修改HTTP的Header,所以HTTP的续传比较容易实现。有的FTP控件不支持REST命令,也有控件通过特殊的属性来实现REST命令,如IP*Works!(http://www.dev-soft.com/)就使用StartByte属性来实现REST的功能。
VB本身包括的Internet Transfer Control不能实现FTP的断点传续,因为不支持REST命令,但执行Execute 方法时利用requestHeaders参数可以实现HTTP的断点传续。
编程新手往往觉得Internet编程不直观,为了便于观察客户程序命令和服务器的响应,你可以使用NetAnts(http://netants.yeah.net),它有一个Log窗口(图1)记录了客户程序命令和服务器的响应,从中你可以清楚地看到整个下载过程。
这方面的详细的例子可以参考Internet Component Suite(http://www.rtfm.be/fpiette/indexuk.htm)。
相关问题:
QA001062 "FTP协议中的REST命令如何使用"
QA003323 "分段下载的程序,怎样得到客户端文件的各线程的断点位置"
此问题由李海回答。
| |
|
|
| |
|
|