網絡編程之webclient和httpwebrequest的使用


(1)Lambda表達式

Lambda 表達式”是一個匿名函數,它可以包含表達式和語句,並且可用於創建委托或表達式樹類型。

所有 Lambda 表達式都使用 Lambda 運算符 =>,該運算符讀為“goes to”。 該 Lambda 運算符的左邊是輸入參數(如果有),右邊包含表達式或語句塊。 Lambda 表達式 x => x * x 讀作“x goes to x times x”。可以將此表達式分配給委托類型,如下所示:

C#
delegate int del(int i); static void Main(string[] args) {     del myDelegate = x => x * x;     int j = myDelegate(5); //j = 25 } 

創建表達式樹類型:

C#
using System.Linq.Expressions;  namespace ConsoleApplication1 {     class Program     {         static void Main(string[] args)         {             Expression<del> myET = x => x * x;         }     } } 

=> 運算符具有與賦值運算符 (=) 相同的優先級,並且是右結合運算符。


(2)System.Net.WebClient 類

提供向 URI 標識的資源發送數據和從 URI 標識的資源接收數據的公共方法。

WebClient 類提供向 URI(支持以 http:、https:、ftp:、和 file: 方案標識符開頭的 URI) 標識的任何本地、Intranet 或 Internet 資源發送數據以及從這些資源接收數據的公共方法。

WebClient 類使用 WebRequest 類提供對資源的訪問。WebClient 實例可以通過任何已向 WebRequest.RegisterPrefix 方法注冊的 WebRequest 子代訪問數據。


(3)System.Net. HttpWebRequest  

提供 WebRequest 類的 HTTP 特定的實現。

HttpWebRequest 對 HTTP 協議進行了完整的封裝,程序使用 HTTP 協議和服務器交互主要是進行數據的提交,通常數據的提交是通過 GET 和 POST 兩種方式來完成。

    HttpWebRequest 常用命令如下:

  HttpWebRequest - 對指定的 URI 發出請求
  Create() - 初始化一個 WebRequest
  BeginGetResponse() - 開始對指定 URI 資源做異步請求
  EndGetResponse() - 結束對指定 URI 資源做異步請求
  HttpWebResponse - 對指定的 URI 做出響應
  GetResponseStream() - 獲取響應的數據流   需要注意的是: HttpWebRequest使用基於代理的異步編程模型,在HTTP響應返回時引發的HttpWebRequest回調不是在UI線程上返回的,因此在該回調中需要額外代碼處理UI,否則就會產生"跨線程訪問無效"錯誤。

(4)回調方法的簽名和工作機制
      1. 回調方法必須要符合以下簽名:
<
修飾符>void <方法名>(IAsynResult asynResult);回調的方法的名稱的統一規范是在名稱前面加On ,如:OnAsynCallBack();(注:命名事件和委托等類型時候同樣有類似的慣例)
   2.
工作機制:
.Net
使用從線程池中得到的線程來執行通過BeginInvoke()分配的方法,當異步方法執行完成時,工作線程調用回調方法而不只直接回到線程池中,要實現回調方法,我們必須在使用beginInvoke()方法的時候指定一個參數為IAsyncResult類型的方法,因為在 AsyncResult是一個.Net中已經定義好的委托,我們要使用回調方法的話,就必須符合他的要求:他的定義如下,public delegate void AsyncCallBack(IAsyncResult asyncResult);
(5)實例
                // Create a HttpWebrequest object to the desired URL.
                HttpWebRequest myHttpWebRequest1= (HttpWebRequest)WebRequest.Create(uri);
                // Create an instance of the RequestState and assign the previous myHttpWebRequest1
                // object to it's request field.  
                RequestState myRequestState = new RequestState();  //壓根找不到這個類
                myRequestState.request = myHttpWebRequest1;
                // Start the asynchronous request.
                IAsyncResult result=
                  (IAsyncResult) myHttpWebRequest1.BeginGetResponse(new AsyncCallback(RespCallback),myRequestState);
                // Release the HttpWebResponse resource.
                myRequestState.response.Close();
              }
(6)WebClient
private void DoWebClient()
{
WebClient webClient
= new WebClient();
// 在不阻止調用線程的情況下,從資源返回數據 
webClient.OpenReadAsync(
new Uri( " http://www.cnblogs.com/linzheng " ));
// 異步操作完成時發生 
webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(webClient_OpenReadCompleted);
}

void webClient_OpenReadCompleted( object sender, OpenReadCompletedEventArgs e)
{
using (StreamReader reader = new StreamReader(e.Result))
{
string contents = reader.ReadToEnd();
。。。。。。

(7)HttpWebRequest
private void DoHttpWebRequest()
{
string url = " http://www.cnblogs.com/linzheng " ;
WebRequest request
= HttpWebRequest.Create(url); // 創建WebRequest類
IAsyncResult result = (IAsyncResult)request.BeginGetResponse(ResponseCallback, request); // 返回異步操作的狀態
}

private void ResponseCallback(IAsyncResult result)
{
HttpWebRequest request
= (HttpWebRequest)result.AsyncState; // 獲取異步操作返回的的信息
WebResponse response = request.EndGetResponse(result); // 結束對 Internet 資源的異步請求

using (Stream stream = response.GetResponseStream())
using (StreamReader reader = new StreamReader(stream))
{
string contents = reader.ReadToEnd();
......
Dispatcher.BeginInvoke(() => 
httpWebRequestTextBlock.Text = contents.ToString().Substring(begin + 7 , end - begin - 7 ); 
textBox2.Text = note; 
});
}

 

 完美世界 http://www.23cat.com/Contents_51864.html 
  戮仙 http://www.23cat.com/Book_51960.html  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM