首 页 网络编程
网页制作 图形图象 操作系统 冲浪宝典
软件教学 认证考试

网络安全 网络办公 行业资讯 评测对比
您当前位置:站长天空 -> 网页制作
利用Winsock下载文件(支持断点续传)-数据库专栏,SQL Server
作者:网友供稿 点击:6
推荐
西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!可在线rar解压,自动数据恢复设置虚拟目录等.免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金
站内搜索
文章页数:[1] 
第一步,建立工程,引用winsock(visual basic最好打sp6,否则ms有一个bug),在此省略

第二步,具体实现代码步骤1:发送请求
说明:
(1)这里简单采用了判断是否已经有同名文件表示是否要断点续传
(2)下载的地址,大小和已下载字节数也只是简单地存在ini文件中,更安全的做法本文不作讨论
有兴趣的朋友可以联系我

--------------------------------------------------------------------------------
   name:downloadfile
   author:reker 2004/3/20
   desc:连接远端主机,发送接收文件请求,等待远端主机响应
   params:none
   history:none
--------------------------------------------------------------------------------
private sub downloadfile()
    on error resume next
    starttime = time()
    with winsck
        .remotehost = host 远端主机地址
        .remoteport = 80
        .connect
        等待服务器连接相应
        do while .state <> sckconnected
            doevents: doevents: doevents: doevents
            20秒超时
            if datediff("s", starttime, time()) > 20 then
                showinfo "连接超时"
                .close
                exit sub
            end if
        loop
        发送下载文件请求
        此处使用http/1.0协议
        strcommand = "get " + updateurl + " http/1.0" + vbcrlf 下载地址
        strcommand = strcommand + "accept: */*" + vbcrlf      这句可以不要
        strcommand = strcommand + "accept: text/html" + vbcrlf 这句可以不要
        strcommand = strcommand + vbcrlf
        strcommand = strcommand & "host: " & host & vbcrlf
        if dir(savefilename) <> "" then 是否已经存在下载文件
            dim confirm
            confirm = msgbox("已经存在文件,是否断点续传?", vbyesno + vbquestion, "提示")
            if confirm = vbyes then
                downposition = ""
                if not ofilectrl.readkeyfromini("update", "downsize", apppath + "update.ini", downposition) then
                读取上次下载的字节数
                    msgbox "读取大小错误", vbinformation, "提示"
                end if
                发送断点续传请求
                strcommand = strcommand & "range: bytes=" & clng(downposition) & "-" & vbcrlf
            else
                kill savefilename 删除原文件
            end if
        end if
        strcommand = strcommand & "connection: keep-alive" & vbcrlf
        strcommand = strcommand & vbcrlf
        .senddata strcommand
    end with
    if err then
        lblprocessresult.caption = lblprocessresult.caption & vbcrlf & vbcrlf & "下载文件出错:" & err.description
        lblprocessresult.refresh
    end if
end sub


第二步,具体实现代码步骤2:接收数据
--------------------------------------------------------------------------------
   name:winsck_dataarrival
   author:reker 2004/3/20
   desc:略
   params:略
   return:none
   history:none
--------------------------------------------------------------------------------
private sub winsck_dataarrival(byval bytestotal as long)
    on error resume next
    doevents: doevents
    dim bytedata() as byte
    winsck.getdata bytedata(), vbbyte
    receivedata = receivedata & strconv(bytedata(), vbunicode)
    if instr(1, receivedata, "content-length:") > 0 and filesize = 0 then 仅第一次计算,filesize=0
        dim pos1 as long, pos2 as long
        pos1 = instr(1, receivedata, "content-length:")
        pos2 = instr(pos1 + 16, receivedata, vbcrlf)
        if pos2 > pos1 then
            filesizebyte = mid(receivedata, pos1 + 16, pos2 - pos1 - 16) 计算文件的长度
            starttime = timer() 保存开始下载的时间
            progssbar.max = filesizebyte 设置进度条
            filesize = formatnumber(filesizebyte / 1024, 2) 以kb表示
            showinfo "本次下载的文件共" + cstr(filesize) + "kb..."
        end if
    end if
    从服务器响应返回的数据查找下载文件的起始位置
    if fileheaderlen = 0 then
        for i = 0 to ubound(bytedata()) - 3
            if bytedata(i) = 13 and bytedata(i + 1) = 10 and bytedata(i + 2) = 13 and bytedata(i + 3) = 10 then
                startpos = i + 4 将文件头的长度保存下来
                fileheaderlen = startpos
                exit for
            end if
            doevents 
        next i
    end if
    filesizehavedown = bytestotal + filesizehavedown - fileheaderlen     
    已下载文件长度,需减去响应的文件头长度
    dbldownloadspeed = formatnumber(formatnumber(filesizehavedown / 1024, 2) / (formatnumber((timer() - starttime), 4)), 2)  计算下载速率 kb/s
    if dbldownloadspeed <> 0 then  计算剩余下载的时间
        sresttime = getresttime(clng((filesize - (filesizehavedown) / 1024) / dbldownloadspeed)) 此过程略,可以删除此段代码
        labresttime.caption = "剩余时间:º" + sresttime
        labresttime.refresh
    end if
    labdownloadspeed.caption = cstr(dbldownloadspeed) + " kb/s"
    labdownloadspeed.refresh
    progssbar.value = filesizehavedown
    写数据
    fnum = freefile()
    open savefilename for binary lock write as #fnum
    if lof(fnum) > 0 then
        seek #fnum, lof(fnum) + 1
    end if
    if startpos > 0 then
        for i = startpos to ubound(bytedata())
            put #fnum, , bytedata(i)
        next i
    else 
        put #fnum, , bytedata()
    end if
    close #fnum 
    if err then
        lblprocessresult.caption = lblprocessresult.caption & vbcrlf & 获取数据出错:" & err.description
        lblprocessresult.refresh
    end if
end sub
文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

文章页数:[1] 


放大字体显示 缩小字体显示 打印文章 推荐给朋友
热门文章
·中文字符从jsp传送到servlet的处理-JSP教程,Jsp/Servlet
·带右键菜单的树形控件(1)-ASP教程,ASP应用
·RSA加密解密及RSA签名和验证-.NET教程,安全和优化
·VB中String的用法及原理-.NET教程,VB.Net语言
·ASP Forum2.0学习笔记之二---了解Master Pages库-ASP教程,数据库相关
·使用ImageList时候发生运行错误提示资源问题的解决方法-.NET教程,评论及其它
·web.config点滴:更改login控件对密码安全性的要求-.NET教程,组件控件开发
·基于h.323协议的ip视频会议质量技术
·框架(javascript)-JSP教程,Java技巧及代码
·讲一讲ASP处理数据用的组件ADO (ActiveX Data Object)-ASP教程,数据库相关
最新文章
·从两方面看ajax与b/s_ajax教程
·google adsense for content新的广告样式_google推广
·flash as代码简单实现动态文本包边效果_flash教程
·我做gg广告从0到每月1000美元详细全过程_网赚技巧
·google adsense 中文高价关键词一览_网赚技巧
·谁说小网站赚不到钱!_网赚技巧
·什么样的网站才算是高质量网站呢?_站长心得
·经验:搜索引擎的页面各个元素的权重比例参考_站长心得
·搜索引擎google排名优化全攻略_google推广
·月入千美金不是梦--adsense高收入实战及分_google推广
相关主题
  • 利用windows系统自带命令手工搞定病毒_病毒防治教程
  • 利用winsock控件实现局域网通信_visualbasic教程
  • 利用winsock控件实现局域网通信_visualbasic教程
  • 利用Windows 2000 Server的RRAS实现软路由-网管专栏,操作系统
  • 利用Windows 2000 Server的RRAS实现VPN服务器-网管专栏,操作系统
  • 西部数码虚拟主机

    友情链接
    CNNIC 西部数码
    万网 自助建站
    虚拟主机 asp空间
    域名注册 域名
    域名申请 主页空间
    论坛空间 网站空间
    国际域名 虚拟空间
    空间租用 DDOS防火墙
    成都主机托管 四川主机托管
    主机租用 服务器租用
    网站目录 自助建站
    虚拟主机 网址大全
    软件下载
    自助链接
    虚拟主机资讯 特价虚拟主机
    版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
    关于我们:站长天空:专业提供最新的站长资讯、在线教程、虚拟主机权威评测、虚拟主机性能对比、网站制作教程,开发教程,站长工具。包括网页制作教程、冲浪宝典、编程参考、操作系统、软件教学、行业动态等。
    特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
    发表评论 打印  刷新     关闭