Author: 张悦    From:Internet
     在互连网广泛应用的今天,将有用的信息下载到本地是一件很普遍的事。当然,这个过程我们可以通过许多下载工具实现。目前的这些下载工具,绝大多数都是使用http协议完成的。虽然使用http编写下载工具是一种很简单的方法,但美中不足的是开发人员必须要结合winsock并编写大量的代码才可以完成。因为http是一个工业标准,你不可以自定义这个标准,唯一的办法只有服从。而且由于用到winsock技术,所以对开发人员的要求也很高。 
   
  以前我曾经用vb6编写了一个下载程序,在程序中使用了vb6中提供的winsock activeX控件和http协议来实现最简单的下载功能。这个程序的长度有200行。 
   
  今天当我翻开.net框架时,我兴奋了,应为要编写一个下载软件比以前方便、快捷了,于是我忍不住希望有人和我分享这种愉悦的心情。我真的是为.net叫好,他能使你从乏味的工作中解脱出来! 
   
  下面就让我们一下这种技术为什么如此让人兴奋。 
   
  在.net中编写快速简单的下载和上传的代码只要调用WebClient类就可以了。对于简单请求和响应事务,WebClient类提供将数据上载到Internet服务器或从Internet服务器下载数据的最简便的方法。WebClient提供上载和下载文件、发送和接收流以及将数据缓冲区发送到服务器并接收响应的方法。这样,事情就简单多了。 
   
  了解了这个技术后,我们就可以编写下载和上传的程序了。 
   
  先添加timer,textbox,button,savefiledialog和4个label控件,savefiledialog用来保存下载的文件,timen用来和一个label控件结合,显示已经下载了多少。Textbox用来接受输入的url地址。将timer1的属性interval定为1000,即每一秒启动一次Timer1_Tick事件。将label1.text定为http:\\。 
   
  代码如下: 
   
  Imports System.Net'到入命名空间 
  Public Class Form1 
   Inherits System.Windows.Forms.Form 
   Public Shared fpath As String 
   Dim fsize As Long 
   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As 
  System.EventArgs) Handles Button1.Click 
   Dim urld As String 
   Dim i As Integer 
   Dim dfile As New WebClient()'实例化WebClient类 
   SaveFileDialog1.ShowDialog() 
   fpath = SaveFileDialog1.FileName 
   Label3.Text = "文件保存在" & fpath 
   urld = Label1.Text + TextBox1.Text 
   Timer1.Enabled = True 
   dfile.DownloadFile(urld, fpath)'下载指定nrl地址的文件 
   Timer1.Enabled = False 
   End Sub 
   Private Sub Timer1_Tick(ByVal sender As Object, 
   ByVal e As System.EventArgs) Handles Timer1.Tick 
   Me.Refresh()'用来刷新窗口 
   Dim th2 As New th1() 
   Dim tt As New System.Threading.Thread(AddressOf th2.timeth) 实例化线程类 
   tt.Start()'启动线程 
   Label2.Text = th2.downk'显示下载文件的大小 
  '进行计算下载速度 
  Static k As Integer 
   Dim p,downspeed 
   p = k 
   k = p + 1 
   p = k 
  Dim fileinfo As New System.IO.FileInfo(form.fpath) 
  downspeed = fileinfo.Length() 
  downspeed= downspeed/p 
  label4.textbox= "当前下载速度是"& downspeed & "k/m" 
   End Sub 
  End Class 
  Public Class th1 
   Public Shared downk As String 
   Dim form As New Form1() 
   Dim fileinfo As New System.IO.FileInfo(form.fpath) 
   Dim fsize As Long 
   Public Sub timeth() 
   If fileinfo.Exists = True Then 
   fsize = fileinfo.Length() 
   downk = "以下载文件" & fsize & "k" 
   End If 
   End Sub 
  End Class 
   
   
   
  你看懂上面的代码了吗?别急,让我来解释一下。 
   
  ● 第一个要解释的是线程,简单的说就是在exe文件运行的时候计算机会为他创建一个进程,将这个进程分成若个块,每块完成不同的任务,这些块就是线程(更多的知识请见相关照料)。那为什么我会在Timer1_Tick事件(每过一段时间就执行其中的代码)中使用线程尼?因为我发现在调试的时候WebClient类占有的资源校大(这可能是net自己的原因),在运行时使整个窗口的显示不完整,使用了线程和Me.Refresh()语句后情况有所好转(在net中要创建线程的方法见msdn)。 
   
  ● 另一个要解释的是System.IO框架中的FileInfo类,我用他来读已经下载的文件大小。在程序中我没有获取要下载文件的大小,换句话说就是只有等下载完成后才可以知道文件到底用多大。这时您或许要问,难道net中没提供相关的类吗?我花了5个小时,将net中的所有类打开,一一查看,终于找了到相关的类。这两个类就是WebRequest和WebResponse(这两个类的使用见msdn),即它们的子代类因为这两个类的使用比WebClient复杂(如果你要写更复杂的下载程序就要使用它们)但是如果你要获得服务器上你要下载的文件的大小,你就必须使用它们。下面我就写一个简单的代码,来获得其服务器上你要下载的文件的大小: 
   
  Private Sub Form1_Click(ByVal sender As Object, 
  ByVal e As System.EventArgs) Handles MyBase.Click 
   Dim th As WebRequest = 
  WebRequest.Create("http://download2.ssreader.com/download/SSR362b5B(0802).exe")
   '这个站是超星的网站,SSR362b5B(0802).exe文件是超星图书阅读器 
   Dim w As WebResponse = th.GetResponse() 
   Dim j As Long 
   j = w.ContentLength().ToString'获得文件大小 
   Debug.WriteLine(j) 
   End Sub 
   
   
   
  ● 对于无法获得的下载速度,我们可以通过计算来获得。计算的思路是,通过定义一个静态变量,使他每一秒加一,就可以知道下载了多少秒,在从downspeed = fileinfo.Length()语句得到下载的这段时间文件的大小,用downspeed除以秒就可以得到当前的下载速度了,请注意这只是一个估略的值。如果你想每隔n秒才计算的话,设置p=k* timer1.interval/1000 
   
  ● 最后要说的是,你还可以调用wininte.dll这个动态库中的函数,这个库是专为编写网络程序提供的。使用它你也可以编写下载和上传的程序。当然你也可以使用http来写。 
   
  在结束前向大家推荐一本用vb和协议开发的书,《visual basic 网络高级编程》是人民邮电出版社出的,isbn号是7-115-09171-4/tp.2122,60元汪晓平,钟军写的。这本书详细讲了用vb和http,ftp,smtp,nntp,telnt协议开发网络程序的知识。 
   
  看了以上的代码你是否觉得编写下载软件以不是什么高手才可以完成的任务了吧!那就动手吧!

转摘自:http://www.cnblogs.com/xujiaci/archive/2006/08/09/472107.html

转载于:https://www.cnblogs.com/hxworm/articles/1961957.html

[转]用.net快速开发下载软件相关推荐

  1. 万立快速开发平台——软件制作大师

    万立快速开发平台,是一款国内最好用的快速开发平台,使用者不需要懂技术,不用写代码,可以快速地开发出强大的管理软件,例如ERP,OA,CRM,HRM等等软件. 万立快速开发平台,能够让每个人,每个企业, ...

  2. 9、快速开发平台 - 软件技术系列文章

    前面介绍了软件技术相关的一些内容,这篇讲讲软件的快速开发平台. 快速开发平台,在软件复用那篇提过一下,就是已经将业务系统的底层的功能进行开发完毕了,直接使用代码生成器进行高层的业务功能开发即可,省时省 ...

  3. 无代码为企业快速开发管理软件

    前言 自2019年疫情爆发以来,生存成了绝大多数企业的首要目标.就连华为CEO任正非也不例外,在华为内部会上,下的第一道指令就是"活下去". 要知道,华为5月被美国二次制裁的时候没 ...

  4. [wxWidgets]_[初级]_[使用wxFormBuilder设计XRC文件快速开发界面]

    场景: 1.wxWidgets是一个优秀的界面库,它的xrc界面布局格式也是很优秀的,可以使用类似mfc的所见即所得的设计方式,我发现它和xcode的interface builder的理念如出一辙. ...

  5. 安卓app开发工具_怎么开发app软件需要多少钱?主流app开发工具盘点

    现在智能手机的快速普及让手机app在生活中越来越重要,很多企业及创业者也意识到了app的重要性,但是怎么开发app软件?有哪些主流app开发工具呢?这里就为大家分享一下如何快速开发app软件. 一.编 ...

  6. 快速开发平台分享-UCML快速开发七种武器

    传统的快速开发平台强调的是组件重用.构件重用,主要解决功能重用层面,一般提供了软件开发最常用的功能:表单设计.BPM(业务流程管理).报表.组织机构及权限等功能.但只有功能重用,没有过程重用,要么只能 ...

  7. 学习开发安卓应用总结(快速了解-从下载软件到开发运行APP)

    快速开发一个安卓应用 1.安装Andriod Studio,配置环境 2.运行调试APP 2.1 下载Genymotion模拟真机调试APP(视情况) 2.2 真机调试使用APP 2.3 运行他人项目 ...

  8. 企业级管理软件快速开发平台-完整的权限管理设计

    前几篇博介绍了极致业务基础平台的框架及一些开发效果详细见下面的地址 极致业务基础平台简要介绍: http://www.cnblogs.com/Jeez_JBF/archive/2010/07/29/J ...

  9. JEPF软件快速开发平台学习心得之请假单功能的完成(一)

    首先我也是点一次接触这个软件快速开发平台,我在学习这个平台的同时简单记录下我对这个平台是如何一步步熟悉或者是上手的,也有简单的一点总结和学习心得,希望对你们有用,同时也可以让我对知识点更快速的查缺补漏 ...

  10. 企业级管理软件快速开发平台-在同一个数据库上进行多个系统开发

    前几篇博介绍了极致业务基础平台的框架及一些开发效果详细见下面的地址 极致业务基础平台简要介绍: http://www.cnblogs.com/Jeez_JBF/archive/2010/07/29/J ...

最新文章

  1. 【问题收录】Ubuntu14.04安装时黑屏处理
  2. 【错误记录】Android Studio 中查看 Gradle 配置的方法源码 ( 配置 gradle-wrapper.properties 中版本为 gradle-x.x.x-all.zip )
  3. 1032 Sharing (25 分) 【难度: 一般 / 知识点: 链表】
  4. 怎么查看ftp服务器的版本信息,查看ftp服务器版本
  5. 卧槽!微信可以改彩色昵称了!又get一个撩妹小技巧 ~~
  6. 这个被称为20世纪最伟大人物的最强理科生,到底有多强,你根本不了解
  7. qt4.7 mysql_详解Qt 4.7编译和访问Mysql驱动
  8. iPhone 13系列要上全新配色:全系存储容量调整
  9. [转载] 详解 Numpy.ndarray
  10. 天呢,小学生都在B站讲算法?
  11. 文件对应的Content-Type类型
  12. centos7安装apache http server启动失败
  13. cpuz测试分数天梯图_2019年CPU单核跑分天梯图V1.22版(190712)
  14. 公共基础知识中计算机知识,公共基础知识之计算机知识总结
  15. JSP统计网站访问人数
  16. workerman实现聊天室
  17. Beej网络编程指南《一》
  18. python速查app_过期查询和appengin
  19. 度目智慧通行让常态化防疫更高效
  20. 必备技能21:正尝试在 OS 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码,这样做会导致应用程序挂起。

热门文章

  1. 热力地图高德_HeatMap丨丨基于高德地图API制作热力图。
  2. Get和Post请求区别和使用场景
  3. 【电气制图】AutoCad的常用操作(持续更新中...)
  4. 最大子段和问题【思路及实现】
  5. 【软件测试】:测试通过标准
  6. samba服务设置与访问共享文件夹
  7. wordpress文章增加行楷和魏碑字体
  8. 批处理变量输出时提示“ECHO处于关闭状态”
  9. 互补滤波系数_一阶互补滤波
  10. js调用数科阅读器_使用 Vue 和 epub.js 制作电子书阅读器