国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

用.net和協議快速開發下載軟件

2019-11-18 12:04:41
字體:
來源:轉載
供稿:網友

  在互連網廣泛應用的今天,將有用的信息下載到本地是一件很普遍的事。當然,這個過程我們可以通過許多下載工具實現。目前的這些下載工具,絕大多數都是使用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協議開發網絡程序的知識。
  
  看了以上的代碼你是否覺得編寫下載軟件以不是什么高手才可以完成的任務了吧!那就動手吧!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 壤塘县| 广平县| 绵阳市| 枣庄市| 宁波市| 金堂县| 定日县| 六枝特区| 房山区| 深泽县| 水富县| 江华| 阿荣旗| 新巴尔虎右旗| 汤阴县| 佳木斯市| 陵川县| 涟源市| 南乐县| 吉木萨尔县| 迭部县| 铜川市| 鸡泽县| 台中县| 夏津县| 大姚县| 通州区| 龙里县| 沙田区| 富源县| 洪湖市| 大邑县| 从化市| 禹州市| 桃园县| 双城市| 普安县| 北川| 柳林县| 威海市| 许昌县|