用.net快速开发下载软件
敬业的IT人
互联网
佚名
2008-5-23 19:43:14
在互连网广泛应用的今天,将有用的信息下载到本地是一件很普遍的事。当然,这个过程我们可以通过许多下载工具实现。目前的这些下载工具,绝大多数都是使用http协议完成的。
以前我曾经用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
你看懂上面的代码了吗?别急,让我来解释一下。
另一个要解释的是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来写。
看了以上的代码你是否觉得编写下载软件以不是什么高手才可以完成的任务了吧!那就动手吧!
- 最新文章
- 一切从这里开始 Visual Basic.NET[05-23]
- 在Visual Basic .NET中文件I/O选项 (4)[05-23]
- 在Visual Basic .NET中文件I/O选项 (3)[05-23]
- 在Visual Basic .NET中文件I/O选项 (2)[05-23]
- 在Visual Basic .NET中文件I/O选项 (1)[05-23]
- 使用VB.NET中的动态属性[05-23]
- 相关文章
- 一个很有意思的爱情软件.是用VB.net开发的[05-23]
- 公司软件部VB组代码撰写暂行约定 probezy(转贴)[05-22]
- 用VB.NET做个论坛发帖软件[05-22]
- 用vb实现ftp的上传下载[05-22]
- 巧用VB数据库,编写软件试用期[05-22]
- 专为VB制做的多语言软件开发工具,可以轻松完成对可视界面的多..[05-22]
