構(gòu)造.NET環(huán)境下的頁(yè)面下載器 (1)
發(fā)表時(shí)間:2024-06-14 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]一.前言: 微軟的.Net框架為我們進(jìn)行網(wǎng)絡(luò)編程提供了以下兩個(gè)名字空間:System.Net以及System.Net.Sockets。通過合理運(yùn)用其中的類和方法,我們可以很容易地編寫出各種網(wǎng)絡(luò)應(yīng)用程序。這種網(wǎng)絡(luò)應(yīng)用程序既可以是基于流套接字的,也可以是基于數(shù)據(jù)報(bào)套接字的。而基于流套...
一.前言:
微軟的.Net框架為我們進(jìn)行網(wǎng)絡(luò)編程提供了以下兩個(gè)名字空間:System.Net以及System.Net.Sockets。通過合理運(yùn)用其中的類和方法,我們可以很容易地編寫出各種網(wǎng)絡(luò)應(yīng)用程序。這種網(wǎng)絡(luò)應(yīng)用程序既可以是基于流套接字的,也可以是基于數(shù)據(jù)報(bào)套接字的。而基于流套接字的通訊中采用最廣泛的協(xié)議就是TCP協(xié)議,基于數(shù)據(jù)報(bào)套接字的通訊中采用最廣泛的自然就是UDP協(xié)議了。下面我將重點(diǎn)向大家介紹.NET網(wǎng)絡(luò)編程中的一些類:Dns類、IPHostEntry類、IPEndPoint類以及Socket類,并會(huì)在最后給出一個(gè)網(wǎng)頁(yè)下載器的實(shí)例以加深讀者對(duì).NET網(wǎng)絡(luò)編程的理解。
二.網(wǎng)絡(luò)編程類介紹:
Dns 類:
向使用 TCP/IP Internet 服務(wù)的應(yīng)用程序提供域名服務(wù)。其Resolve()方法查詢DNS服務(wù)器以將用戶友好的域名(如"www.google.com")映射到數(shù)字形式的 Internet 地址(如 192.168.1.1)。Resolve()方法返回一個(gè)IPHostEnty實(shí)例,該實(shí)例包含所請(qǐng)求名稱的地址和別名的列表。大多數(shù)情況下,可以使用 AddressList 數(shù)組中返回的第一個(gè)地址。
Resolve()方法的函數(shù)原型如下:
public static IPHostEntry Resolve(string hostName);
下面的代碼獲取一個(gè) IPAddress 實(shí)例,該實(shí)例包含服務(wù)器 www.google.com 的IP地址:
IPHostEntry ipHostInfo = Dns.Resolve("www.google.com");
IPAddress ipAddress = ipHostInfo.AddressList[0];
不過在Dns類中,除了通過Resolve()方法,你還可以通過GetHostByAddress()方法以及GetHostByName()方法來得到相應(yīng)的IPHostEntry實(shí)例,函數(shù)原型如下:
public static IPHostEntry GetHostByAddress(string IPAddress);
public static IPHostEntry GetHostByName(string hostName);
下面的代碼顯示了如何分別運(yùn)用以上兩種方法獲得包含服務(wù)器www.google.com的相關(guān)信息的IPHostEntry實(shí)例:
IPHostEntry hostInfo=Dns.GetHostByAddress("192.168.1.1");
IPHostEntry hostInfo=Dns.GetHostByName("www.google.com");
在使用以上方法時(shí),你將可能需要處理以下幾種異常:
SocketException異常:訪問Socket時(shí)操作系統(tǒng)發(fā)生錯(cuò)誤引發(fā)
ArgumentNullException異常:參數(shù)為空引用引發(fā)
ObjectDisposedException異常:Socket已經(jīng)關(guān)閉引發(fā)
以上,我向大家簡(jiǎn)要地介紹了Dns類中一些方法以及其用法,并列舉出了可能出現(xiàn)的異常,下面就讓我們轉(zhuǎn)到和Dns類密切相關(guān)的IPHostEntry類。
IPHostEntry類:
該類的實(shí)例對(duì)象中包含了Internet主機(jī)的地址相關(guān)信息。此類型的所有公共靜態(tài)成員對(duì)多線程操作而言都是安全的,但不保證任何實(shí)例成員是線程安全的。其中主要的一些屬性有:AddressList屬性、Aliases屬性以及HostName屬性。
AddressList屬性和Aliases屬性的作用分別是獲取或設(shè)置與主機(jī)關(guān)聯(lián)的IP地址列表以及獲取或設(shè)置與主機(jī)關(guān)聯(lián)的別名列表。其中AddressList屬性值是一個(gè)IPAddress類型的數(shù)組,包含解析為Aliases屬性中包含的主機(jī)名的IP地址;Aliases屬性值是一組字符串,包含解析為AddressList 屬性中的IP地址的DNS名。而HostName屬性比較好理解,它包含了服務(wù)器的主要主機(jī)名,這光從名稱上就可以知道了。如果服務(wù)器的DNS項(xiàng)定義了附加別名,則可在Aliases屬性中使用這些別名。
下面的代碼列出了服務(wù)器www.google.com的相關(guān)別名列表以及IP地址列表的長(zhǎng)度并將所有的IP地址列出:
IPHostEntry IPHost = Dns.Resolve("www.google.com/");
string[] aliases = IPHost.Aliases;
Console.WriteLine(aliases.Length);
IPAddress[] addr = IPHost.AddressList;
Console.WriteLine(addr.Length);
for(int i= 0; i < addr.Length ; i++)
{
Console.WriteLine(addr[i]);
}
介紹完IPHostEntry類,我們能獲得了所要連接的主機(jī)的相關(guān)IP地址以及別名列表,但是真正要和主機(jī)取得連接還需要一個(gè)很重要的類-IPEndPoint類。
[1] [2] 下一頁(yè)