熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

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

2013-11-23 18:44:08  來源: Java核心技術 

  在互連網廣泛應用的今天將有用的信息下載到本地是一件很普遍的事當然這個過程我們可以通過許多下載工具實現目前的這些下載工具絕大多數都是使用http協議完成的雖然使用http編寫下載工具是一種很簡單的方法但美中不足的是開發人員必須要結合winsock並編寫大量的代碼才可以完成因為http是一個工業標准你不可以自定義這個標准唯一的辦法只有服從而且由於用到winsock技術所以對開發人員的要求也很高
  
  以前我曾經用vb編寫了一個下載程序在程序中使用了vb中提供的winsock activeX控件和http協議來實現最簡單的下載功能這個程序的長度有
  
  今天當我翻框架時我興奮了應為要編寫一個下載軟件比以前方便快捷了於是我忍不住希望有人和我分享這種愉悅的心情我真的是叫好他能使你從乏味的工作中解脫出來!
  
  下面就讓我們一下這種技術為什麼如此讓人興奮
  
  中編寫快速簡單的下載和上傳的代碼只要調用WebClient類就可以了對於簡單請求和響應事務WebClient類提供將數據上載到Internet服務器或從Internet服務器下載數據的最簡便的方法WebClient提供上載和下載文件發送和接收流以及將數據緩沖區發送到服務器並接收響應的方法這樣事情就簡單多了
  
  了解了這個技術後我們就可以編寫下載和上傳的程序了
  
  先添加timertextboxbuttonsavefiledialog和個label控件savefiledialog用來保存下載的文件timen用來和一個label控件結合顯示已經下載了多少Textbox用來接受輸入的url地址將timer的屬性interval定為即每一秒啟動一次Timer_Tick事件將labeltext定為http\\
  
  代碼如下
  Imports SystemNet到入命名空間
  Public Class Form
  Inherits SystemWindowsFormsForm
  Public Shared fpath As String
  Dim fsize As Long
  Private Sub Button_Click(ByVal sender As SystemObject ByVal e As
  SystemEventArgs) Handles ButtonClick
  Dim urld As String
  Dim i As Integer
  Dim dfile As New WebClient()實例化WebClient類
  SaveFileDialogShowDialog()
  fpath = SaveFileDialogFileName
  LabelText = 文件保存在 &#; fpath
  urld = LabelText + TextBoxText
  TimerEnabled = True
  dfileDownloadFile(urld fpath)下載指定nrl地址的文件
  TimerEnabled = False
  End Sub
  Private Sub Timer_Tick(ByVal sender As Object
  ByVal e As SystemEventArgs) Handles TimerTick
  MeRefresh()用來刷新窗口
  Dim th As New th()
  Dim tt As New SystemThreadingThread(AddressOf thtimeth) 實例化線程類
  ttStart()啟動線程
  LabelText = thdownk顯示下載文件的大小
  進行計算下載速度
  Static k As Integer
  Dim pdownspeed
  p = k
  k = p +
  p = k
  Dim fileinfo As New SystemIOFileInfo(formfpath)
  downspeed = fileinfoLength()
  downspeed= downspeed/p
  labeltextbox= 當前下載速度是&#; downspeed &#; k/m
  End Sub
  End Class
  Public Class th
  Public Shared downk As String
  Dim form As New Form()
  Dim fileinfo As New SystemIOFileInfo(formfpath)
  Dim fsize As Long
  Public Sub timeth()
  If fileinfoExists = True Then
  fsize = fileinfoLength()
  downk = 以下載文件 &#; fsize &#; k
  End If
  End Sub
  End Class
  
  你看懂上面的代碼了嗎?別急讓我來解釋一下
  
  ● 第一個要解釋的是線程簡單的說就是在exe文件運行的時候計算機會為他創建一個進程將這個進程分成若個塊每塊完成不同的任務這些塊就是線程(更多的知識請見相關照料)那為什麼我會在Timer_Tick事件(每過一段時間就執行其中的代碼)中使用線程尼?因為我發現在調試的時候WebClient類占有的資源校大(這可能是net自己的原因)在運行時使整個窗口的顯示不完整使用了線程和MeRefresh()語句後情況有所好轉(在net中要創建線程的方法見msdn)
  
  ● 另一個要解釋的是SystemIO框架中的FileInfo類我用他來讀已經下載的文件大小在程序中我沒有獲取要下載文件的大小換句話說就是只有等下載完成後才可以知道文件到底用多大這時您或許要問難道net中沒提供相關的類嗎?我花了個小時將net中的所有類打開一一查看終於找了到相關的類這兩個類就是WebRequest和WebResponse(這兩個類的使用見msdn)即它們的子代類因為這兩個類的使用比WebClient復雜(如果你要寫更復雜的下載程序就要使用它們)但是如果你要獲得服務器上你要下載的文件的大小你就必須使用它們下面我就寫一個簡單的代碼來獲得其服務器上你要下載的文件的大小
  
  Private Sub Form_Click(ByVal sender As Object
  ByVal e As SystemEventArgs) Handles MyBaseClick
  Dim th As WebRequest =
  WebRequestCreate(()exe)
  這個站是超星的網站SSRbB()exe文件是超星圖書閱讀器
  Dim w As WebResponse = thGetResponse()
  Dim j As Long
  j = wContentLength()ToString獲得文件大小
  DebugWriteLine(j)
  End Sub
  
  ● 對於無法獲得的下載速度我們可以通過計算來獲得計算的思路是通過定義一個靜態變量使他每一秒加一就可以知道下載了多少秒在從downspeed = fileinfoLength()語句得到下載的這段時間文件的大小用downspeed除以秒就可以得到當前的下載速度了請注意這只是一個估略的值如果你想每隔n秒才計算的話設置p=k* timerinterval/
  
  ● 最後要說的是你還可以調用winintedll這個動態庫中的函數這個庫是專為編寫網絡程序提供的使用它你也可以編寫下載和上傳的程序當然你也可以使用http來寫
  
  在結束前向大家推薦一本用vb和協議開發的書《visual basic 網絡高級編程》是人民郵電出版社出的isbn號是/tp元汪曉平鐘軍寫的這本書詳細講了用vb和httpftpsmtpnntptelnt協議開發網絡程序的知識
  
  看了以上的代碼你是否覺得編寫下載軟件以不是什麼高手才可以完成的任務了吧!那就動手吧!

From:http://tw.wingwit.com/Article/program/Java/hx/201311/25638.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.