用VB编写异步多线程下载程序

来源:计算机等级考试    发布时间:2012-08-29    计算机等级考试视频    评论

  为了高效率地下载某站点的网页,我们可利用VB的Internet Transfer 控件编写自己的下载程序, Internet Transfer 控件支持超文本传输协议 (HTTP) 和文件传输协议 (FTP),使用 Internet Transfer 控件可以通过 OpenURL 或 Execute 方法连接到任何使用这两个协议的站点并检索文件。本程序使用多个Internet Transfer 控件,使其同时下载某站点。并可判断文件是否已下载过或下载过的文件是否比服务器上当前的文件陈旧,以决定是否重新下载。所有下载的文件中的链接都做了调整,以便于本地查阅。
  OpenURL 方法以同步方式传输数据。同步指的是传输操作未完成之前,不能执行其它过程。这样数据传输就必须在执行其它代码之前完成。
  而 Execute 方法以异步方式传输数据。在调用 Execute 方法时,传输操作与其它过程无关。这样,在调用 Execute 方法后,在后台接收数据的同时可执行其它代码。
  用 OpenURL 方法能够直接得到可保存到磁盘的数据流,或者直接在 TextBox 控件中阅览(如果数据是文本格式的)。而用 Execute 方法获取数据,则必须用 StateChanged 事件监视该控件的连接状态。当达到适当的状态时,调用 GetChunk 方法从控件的缓冲区获取数据。
  首先,建立启始的http检索连接,
  Public g As Variant
  Public k As Variant
  Public spath As String
  Dim links() As String
  g = 0
  spath = 本地保存下载文件的路径
  links(0)=启始URL
  inet1.execute links(0), "GET" '使用GET方法。
  事件监控子程序(每个Internet Transfer 控件设置相对应的事件监控子程序):
  用StateChanged 事件监视该控件的连接状态, 当该请求已经完成,并且所有数据均已接收到时,调用 GetChunk 方法从控件的缓冲区获取数据。
  Private Sub Inet1_StateChanged(ByVal State As Integer)
  'State = 12 时,使用 GetChunk 方法检索服务器的响应。
  Select Case State
  '...没有列举其它情况。
  Case icResponseCompleted '12
  '获取links(g)中的协议、主机和路径名。
  addsuf = Left(links(g), InStrRev(links(g), "/"))
  '获取links(g)中的文件名。
  fname = Right(links(g), Len(links(g)) - InStrRev(links(g), "/"))
  '判断是否是超文本文件,是超文本文件则分析其中的链接,若不是则存为二进制文件。
  If InStr(1, fname, "htm", vbTextCompare) = True Then
  '初始化用于保存文件的FileSystemObject对象。
  Set fs = CreateObject("Scripting.FileSystemObject")
  Dim vtData As Variant '数据变量。
  Dim strData As String: strData = ""
  Dim bDone As Boolean: bDone = False
  '取得第一块。
  vtData = inet1.GetChunk(1024, icString)
  DoEvents
  Do While Not bDone
  strData = strData & vtData
  DoEvents

上一页1234下一页

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答