講了不少理論,相信你快煩了吧,不過,別急,還要沉著氣,把本節學完,就能開始進行網路程式設計了。
農村有句話叫,沉著氣不少打糧食。學習知識亦是如此。
一,套接字前世今生
系統呼叫,就是應用程式的控制權和作業系統的控制權進行轉換的一個介面。
TCP/IP協議軟體已駐留在作業系統中,由於此協議族被設計為執行在多種系統中,因此TCP/IP允許系
統設計者自己選擇相關API,具體實現細節。這裡最著名的就是美國加利福尼亞伯克利分校為Berkeley UNI
X作業系統定義的一種API,它又稱套接字介面(socket interface),微軟公司在其作業系統中才用了套接字接
口API,形成了一個稍有不同的API,並稱之為Windows Socket,簡稱WinSock。
網路通訊,換個角度來看,就是本計算機要讀取另一地點的計算機的資料,或者要把資料從本計算機寫入
到另一地點的計算機中。“讀取”,“寫入”都要用到系統呼叫。
網路程式設計時常常把套接字作為應用程式和運輸層協議之間的介面,如下圖表示這一概念,圖中假定了運輸
層使用TCP協議(UDP類似),套接字已成為計算機核心的一部分。
套接字以上的程式受應用程式控制的,而套接字以下的運輸層協議軟體是受計算機作業系統控制。因此,只
要應用程式使用TCP/IP協議進行通訊,它就必須通過套接字與作業系統互動並請求其服務。開發者對套接字以上
的程式完全控制,對套接字以下的程式卻只有很少的控制,例如可以選擇運輸層協議等。
當應用程式需要使用網路通訊時,必須首先發出socket系統呼叫,請求系統為其建立一個“套接字”。這個調
用本質是請求系統把網路通訊所需的一些系統資源(如儲存空間,CPU時間,網路頻寬等)分配給該應用程式。系統
為這些資源的總和用一個叫做套接字描述符的號碼(小整數)來表示,然後把這個套接字描述符返回給應用程式。此後,
應用程式所進行的網路操作(建立連線,收發資料,調整通訊引數等)都必須使用這個套接字描述符。所以,幾乎所
有的網路系統呼叫都把這個套接字描述符作為套接字許多引數中的第一個引數。在處理系統呼叫時,通過套接字描述
符,作業系統可以識別出應該使用哪些資源來完成應用程式所請求的服務。通訊結束後應用程式通過一個close系統調
用通知作業系統回收與該套接字描述符相關的所有資源。由此可見,套接字是為了獲得網路服務而與作業系統進行互動
時使用的一種機制。
二,WinSocket與.net中Socket類
.net中socket
msdn曾這樣註解:實現 Berkeley 套接字介面。
個人理解:它是.net對winsocket的一種封裝,就如.net對windows api的其它封裝一樣,是開發者呼叫更簡單,更
方便。
三,.net網路通訊常用類
在.net自動化測試中,關於HTTP請求和相應測試,共有五種方法,其中三中基本方法和兩種低層的方法,下面我們按照
從最容易使用但是最不靈活,到最不容易使用但最為靈活的順序,列出傳送和取回HTTP資料的五種方法。
1.WebClient:使用極為簡單,但是不能傳送認證資訊,在.net3.5中,使用它只能訪問web伺服器和ftp伺服器
WebClient類在後臺使用WebRequest和WebResonse。
2.WebRequest-WebResponse:更大的靈活性,包括髮送認證資訊的能力,是HttpWebRequest
和HttpWebResponse的抽象基類。提供共有的屬性。
3.HttpWebRequest-HttpWebResponse(同級別的還有HttpListener,FTP...):提供對Http協議特有資料的一些控制,
更為複雜,更多控制能力。
4.TcpClient(同級別的還有TcpListener,UDPClient,UDPListener):輕量級自動化測試中,很少用
如需要建立伺服器,可以使用TCPListener類,TCPListener類可以用於為TCP協議建立一個伺服器。
5.Socket:非常低層的一個類,自動化測試程式裡不常用到。
如果要獨立於協議,或需要對TCP和UDP協議進行更多的控制,
本文只是拿自動化測試舉例,說明.net網路通訊中從靈活到不靈活,使用簡單到使用複雜大體結構的一些類。