模拟多线程断点续传

今天算基本完成了 ServerXmlHttp 组件的研究,如果与 asp 结合,vfp 利用此组件可以完成很多 web service 的工作,用来开发 web 程序有极大的利用价值。这里的 web 程序不是指 B/S 模式,用 b/s 模式有很多客户要求暂时还是无法接受的,但数据存放在网络服务器上,只是数据与它交换,本地仍按 c/s 模式来写代码,只要做到 Internet 数据共享,查询和更新的速度足够快,客户就能满足了,而这个组件就可以用来实现这些目的。

  1. 首先这个组件在 IE5 以后的版本中都已自带,不需要另外安装和注册
  2. 相对于 XmlHttp 来说,ServerXmlHttp 可以设置(域名解析,Socket 连接,发送,接收数据)的超时值,但它不会像 XmlHttp 那样自动使用 IE 配置的代理设置,如果使用了的话需要调用 SetProxy 方法手工设置
  3. 用此组件来共享数据,不需要使用 sql server 这样的数据库,用 dbf 也可以简单的实现远程数据共享;服务端用 vfp 编写一个 com 组件,客户端通过此组件向服务端的 asp 网页提交请求,由 asp 网页解释并调用 vfp 编写的 com 组件来完成数据查询/更新/插入/删除等操作,甚至是 vfp 的内部命令也可以;数据存放在服务端 IIS 的非虚拟目录中,可以在很大程度上保证数据的安全
  4. 不像 WinInet 控件,在单个进程内可以同时存在多个 ServerXmlHttp 实例,加上它的异步执行属性,为分块同时下载数据提供了可能

顺便将上次那个利用此组件实现多点下载/断点续传功能的工具做了些修改,基本接近实用了。当然写它的目的就是为了以后做 web 数据共享程序时用来传送大批量更新数据的,当数据量很大时,用 xml 是不合适的,速度超慢,无法做到实用,而如果先将数据压缩成文件或大字符串后再传送,效率将比直接传 xml 格式提高很多倍,解压的花销也低于解析 xml 的花销。由于目的的原因,没有考虑:分析真实下载地址,引用页等问题,毕竟不是做通用下载软件,这方面不是 vfp 要解决的方向,用迅雷足矣。我们的下载器只需用来自动下载数据,所以这个下载表单可以传入参数来自动启动下载操作,如果需要更隐蔽的话,直接调用 downloadfile 类中的方法即可。现在缺省使用 5 个 ServerXmlHttp 实例来同时下载,实验结果是网络情况较好时已可做到完全利用带宽,也可以通过指定 BlockNums 属性来调整它,可用的最大下载块数由客户机的可用内存和 socket 连接数决定。

界面如下:

 

sxhttp_5.rar 中修正了网友发现的两个错误:
1. 大部分网站无法下载,显示 Not Implemented 出错信息。经查,是类库中 AllocTask 方法
   m.loSXH.Open('Get', This.url, .T.) 一行引起,参数 Get 应改为大写 GET。
2. 出现无法获取文件大小的错误,经查是类库中 GetFileSizeAndId 方法
   m.lnFindRow = ASCAN(m.laResponseHeader, 'Content-Range:', -1, -1, 1, 1+8) 一行引起
   漏了一个选项,最后一个参数应该是 1+4+8。

原示例的下载链接已失效,重新上传一个另外的版本:

http://download.csdn.net/download/dkfdtf/10265777

 

 




 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 28
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值