成人AV在线无码|婷婷五月激情色,|伊人加勒比二三四区|国产一区激情都市|亚洲AV无码电影|日av韩av无码|天堂在线亚洲Av|无码一区二区影院|成人无码毛片AV|超碰在线看中文字幕

ip域名互換

計(jì)算機(jī)名稱和IP 地址對于運(yùn)行TCP/IP 協(xié)議的網(wǎng)絡(luò)主機(jī)來說,是兩個最重要的標(biāo)識。所以獲取計(jì)算機(jī)的名稱和IP 地 址,也就成為了網(wǎng)絡(luò)編程的基礎(chǔ)。本節(jié)就來介紹如何使用 C# 獲取計(jì)算機(jī)名稱和IP 地址

計(jì)算機(jī)名稱和IP 地址對于運(yùn)行TCP/IP 協(xié)議的網(wǎng)絡(luò)主機(jī)

來說,是兩個最重要的標(biāo)識。所以獲取計(jì)算機(jī)的名稱和IP 地 址,也就成為了網(wǎng)絡(luò)編程的基礎(chǔ)。本節(jié)就來介紹如何使用 C# 獲取計(jì)算機(jī)名稱和IP 地址。

一、獲取本地計(jì)算機(jī)名稱

要使用C#獲取本地計(jì)算機(jī)名稱,一般有兩種方法:第

一,通過NetBIOS 來獲取本地計(jì)算機(jī)名稱;第二,通過DNS 來獲取本地計(jì)算機(jī)名稱。NetBIOS 是一種非常古老的網(wǎng)絡(luò)協(xié) 議,它是為了和IBM NetBIOS 兼容而引進(jìn)的。NetBIOS 是建 立在BIOS 基礎(chǔ)之上,并對之進(jìn)行了擴(kuò)展,使之能夠支持網(wǎng) 絡(luò)上的I/O 調(diào)用。

通過NetBIOS 來獲取本地計(jì)算機(jī)名稱要使用到System 命

名空間中的Environment 類。Environment 類主要提供有關(guān)當(dāng)前 環(huán)境和平臺的信息以及操作它們的方法。通過NetBIOS 獲取 本地計(jì)算機(jī)名稱使用的是Environment 類的MachineName 屬 性。Environment 類還提供了一些的屬性用以獲取和計(jì)算機(jī)相 關(guān)的其他重要信息,常用屬性如表1 所示:

通過D N S 來獲取本地計(jì)算機(jī)名稱是使用命名空間

“System.Net”中的“Dns”類?!癉ns”類是一個靜態(tài)類,它 提供簡單的域名解析功能。它可以實(shí)現(xiàn)從Internet 域名系統(tǒng) (DNS )檢索關(guān)于特定主機(jī)的信息。獲取網(wǎng)絡(luò)計(jì)算機(jī)名稱和 DNS 解析,都要使用到Dns 類。通過DNS 獲取本地計(jì)算機(jī)名 稱使用的是Dns 類中的“GetHostName”。在Dns 類中還提供 了一些其他的方法,用以實(shí)現(xiàn)簡單的域名解析功能,具體如 表2 所示:

,

下面就通過一個的實(shí)例來具體介紹這二種獲取本地計(jì) 算機(jī)名稱方法。

首先啟動Visual Studio.Net,依次選擇菜單“文件”、“新 建”、“項(xiàng)目”后,在彈出的“新建項(xiàng)目”對話框中,將“項(xiàng) 目類型”設(shè)置為“Visual C# 項(xiàng)目”,將“模板”設(shè)置為

“Windows 應(yīng)用程序”,在“名稱”文本框中輸入“獲取本地計(jì) 算機(jī)名稱”,在“位置”文

本框中輸入“E:VS.NET項(xiàng)

目”,然后單擊“確定”按

鈕。這樣“獲取本地計(jì)算機(jī)

名稱”的項(xiàng)目文件就創(chuàng)建完

成了。

把當(dāng)前窗口切換到

“Form1.cs(設(shè)計(jì))”窗口,

如圖1設(shè)計(jì)窗體,其他的都

采用默認(rèn)值:

單擊button1 將通過NetBIOS 獲取并顯示本地計(jì)算機(jī)名 稱,所以我們這樣填寫button1 的Click

事件:

,

private void button1_Click(object sender, System.EventArgs e) {

string hostName = System.Environment.MachineName;

textBox1.Text = hostName;

}

單擊button2將通過DNS 獲取并顯示本地計(jì)算機(jī)名稱,所

以我們這樣填寫button2 的Click 事件:

private void button2_Click(object sender, System.EventArgs e) {

string hostName =

System.Net.Dns.GetHostName( ); textBox2.Text = hostName;

}

完成后全部保存,

這樣“獲取本地計(jì)算機(jī)

名稱”項(xiàng)目的全部工作

就完成了。按下組合鍵

“Ctrl F5”開始運(yùn)行程

序,分別單擊程序中兩

個“獲取”按鈕,就可以

實(shí)現(xiàn)通過二種不同方式

獲取本地計(jì)算機(jī)名稱,

“獲取本地計(jì)算機(jī)名稱”項(xiàng)目的運(yùn)行界面如圖2 所示:

二、獲取網(wǎng)絡(luò)計(jì)算機(jī)名稱

要獲取網(wǎng)絡(luò)計(jì)算機(jī)名稱,前提條件是要知道網(wǎng)絡(luò)計(jì)算

機(jī)的IP 地址,然后通過IP 地址查詢出網(wǎng)絡(luò)計(jì)算機(jī)的名稱。獲

,

取網(wǎng)絡(luò)中計(jì)算機(jī)名稱要比獲取本地計(jì)算機(jī)名稱要復(fù)雜許多。 這是因?yàn)楦鶕?jù)提供的IP 地址查詢網(wǎng)絡(luò)計(jì)算機(jī)名稱要使用的 Dns 類GetHostByAddress 方法,并不能直接獲取網(wǎng)絡(luò)計(jì)算機(jī) 名稱,GetHostByAddress 方法把查詢的地址信息存放到創(chuàng)建

的IPHostEntry 實(shí)例中,然后通過IPHostEntry 實(shí)例的HostName 屬性才能夠得到指定的I P 地址對應(yīng)的網(wǎng)絡(luò)主機(jī)名稱。

IPHostEntry 類也是編寫網(wǎng)絡(luò)應(yīng)用程序時常用的類之一,在后 面介紹DNS 解析時也要用到,表3 是IPHostEntry 類中一些主 要的屬性:

在編寫獲取網(wǎng)絡(luò)主機(jī)名程序的時候,有兩點(diǎn)需要特別

注意:第一,當(dāng)網(wǎng)絡(luò)主機(jī)不在線時,用上述的查詢方法將會 產(chǎn)生異常,所以獲取網(wǎng)絡(luò)主機(jī)名稱之前,要判斷它是否在線。 第二,判斷輸入的IP 地址是否合法,如果輸入的IP 地址并不合 法,此時程序獲取網(wǎng)絡(luò)計(jì)算機(jī)名稱,同樣也會產(chǎn)生異常。 下面就是根據(jù)上述思路,用C#獲取網(wǎng)絡(luò)主機(jī)名稱的具

體實(shí)現(xiàn)步驟。

首先啟動Visual Studio .Net,依次選擇“文件”、“新 建”、“項(xiàng)目”菜單后,在彈出“新建項(xiàng)目”對話框中將“項(xiàng) 目類型”設(shè)置為“Visual C# 項(xiàng)目”,將“模板”設(shè)置為

“Windows 應(yīng)用程序”,在“名稱”文本框中輸入“獲取網(wǎng)絡(luò) 主機(jī)名”,在“位置”的文本框中輸入“E:VS.NET項(xiàng)目”,然 后單擊“確定”按鈕。這

樣,“獲取網(wǎng)絡(luò)主機(jī)名”的

項(xiàng)目文件就產(chǎn)生了。

把當(dāng)前窗口切換到

“Form1.cs(設(shè)計(jì))”窗口,

如圖3 設(shè)計(jì)窗體,其他的

都采用默認(rèn)值:

再把當(dāng)前窗口切換到

“Form1.cs”,進(jìn)入Form1.

,

c s 的代碼編輯窗口,在

Form1.cs 缺省的導(dǎo)入命名空間代碼之后加入:

using System.Net;

using System.Net.Sockets;

用下列代碼替換Form1.cs 中button1 的Click 事件對應(yīng)的

處理代碼。下列代碼首先判斷輸入的IP 地址是否合法,如果

合法,則再判斷此IP 地址對應(yīng)的網(wǎng)絡(luò)主機(jī)是否在線,如果在

線,才根據(jù)IP 地址查詢出它的名稱。上面兩個判斷,只要有

一個不成立,程序都會彈出提示框并中止程序運(yùn)行:

private void button1_Click(object sender, System.EventArgs e)

{

IPAddress myIP;

//判斷IP 地址的合法性

try

{

myIP = IPAddress.Parse(textBox1.Text);

}

catch

{

MessageBox.Show("輸入的IP 地址不合法!" ,"警告!");

return;

}

//通過給定的IP 地址,進(jìn)行DNS 查詢,得到遠(yuǎn)程主機(jī)名

try

{

IPHostEntry myHost = Dns.GetHostByAddress(myIP); textBox2.Text = myHost.HostName;

,

}

catch

{

MessageBox.Show( "錯誤信

息:IP 地址為" textBox1.

Text "的主機(jī)沒有響應(yīng)"

," 警告!");

}

}

完成后全部保存,

這樣“獲取網(wǎng)絡(luò)主機(jī)名”

項(xiàng)目的全部工作就完成

了。此時按下組合鍵

表1 Environment類常用屬性及其說明

屬 性 說 明

CurrentDirectory 當(dāng)前程序的完整的路徑

MachineName 本地計(jì)算機(jī)的NetBIOS 名稱

NewLine 為此環(huán)境定義的換行字符串

OSVersion 包含當(dāng)前平臺標(biāo)識符和版本號的OperatingSystem 對象 SystemDirectory 系統(tǒng)目錄的完整路徑

TickCount 系統(tǒng)啟動后經(jīng)過的毫秒數(shù)

UserDomainName 與當(dāng)前用戶關(guān)聯(lián)的網(wǎng)絡(luò)域名

UserName 啟動當(dāng)前線程的人的用戶名

表2 Dns類中常用方法及其說明

,

方 法 說 明

BeginGetHostByName 開始異步請求關(guān)于指定DNS 主機(jī)名的IPHostEntry 信息 EndGetHostByName 結(jié)束對DNS 信息的異步請求

BeginResolve 開始異步請求,以便將DNS 主機(jī)名或以點(diǎn)分隔的四部分表示 法格式的IP 地址解析為IPAddress 實(shí)例

EndResolve 結(jié)束對DNS 信息的異步請求

GetHostByAddress 獲取IP 地址的DNS 主機(jī)信息

GetHostByName 獲取指定DNS 主機(jī)名的DNS 信息

GetHostName 獲取本地計(jì)算機(jī)的主機(jī)名

Resolve 將DNS 主機(jī)名或以點(diǎn)分隔的四部分表示法格式的IP 地址解 析為IPHostEntry 實(shí)例

1

“Ctrl F5”運(yùn)行程序,在“請輸入網(wǎng)絡(luò)計(jì)算機(jī)IP 地址”文本框

中輸入IP 地址,若此IP 地址所對應(yīng)的主機(jī)在線,則單擊“獲取” 按鈕以后程序便會查詢此IP 地址對應(yīng)的主機(jī)名并顯示出來。圖

4 是程序運(yùn)行后的界面,其中的“202.96.170.165”地址是QQ

的某個服務(wù)器地址:

三、DNS 解析

DNS 解析就是實(shí)現(xiàn)由域名(也可以為主機(jī)名)到IP 地址

的映射功能。說得直接一點(diǎn)就是通過給定的域名(或主機(jī)

名),得到此計(jì)算機(jī)的對應(yīng)的IP 地址。DNS 解析和獲取網(wǎng)絡(luò)

主機(jī)名的程序結(jié)構(gòu)很相似。由于給定的域名(主機(jī)名)不像

IP 地址存在合法性判斷,所以在DNS 解析中這一步是沒有

的,但在準(zhǔn)備進(jìn)行DNS 解析前也要判斷給定的域名(主機(jī)名)

對應(yīng)的計(jì)算機(jī)是否在線,如果不在線,貿(mào)然的獲取計(jì)算機(jī)IP

地址,則同樣也會出現(xiàn)異常。

DNS 解析使用的是Dns 類中的GetHostByName 方法,

GetHostByName 方法同樣也不能直接獲取主機(jī)IP 地址,而是

把獲取得主機(jī)地址信息存放到創(chuàng)建的IPHostEntry 實(shí)例中,通

,

過IPHostEntry 實(shí)例的AddressList 屬性就可以獲取主機(jī)IP 地址 列表(因?yàn)橐慌_計(jì)算機(jī)的IP 地址可能有多個),這個IP 地址 列表是一個IPAddress 數(shù)組,通過遍歷這個數(shù)組就能夠獲得 計(jì)算機(jī)的所有IP 地址了。所以說DNS 解析的具體實(shí)現(xiàn)過程要 比獲取網(wǎng)絡(luò)主機(jī)名要麻煩一點(diǎn)。

下面就是根據(jù)上述思路,用C#進(jìn)行DNS 解析的具體實(shí)

現(xiàn)步驟。

首先啟動Visual Studio.Net,依次選擇“文件”、“新建”、 “項(xiàng)目”菜單后,在彈出“新建項(xiàng)目”對話框中將“項(xiàng)目類 型”設(shè)置為“Visual C# 項(xiàng)

目”, 將“ 模板” 設(shè)置為

“Windows 應(yīng)用程序”,在“名

稱”文本框中輸入“DNS解析”,

在“位置”的文本框中輸入“E:

VS.NET項(xiàng)目”,然后單擊“確

定”按鈕。這樣,“DNS 解析”

的項(xiàng)目文件就產(chǎn)生了。

把當(dāng)前窗口切換到

“Form1.cs(設(shè)計(jì))”窗口,如

圖5 設(shè)計(jì)窗體,其他的都采用

默認(rèn)值:

再把當(dāng)前窗口切換到“Form1.cs”,進(jìn)入Form1.cs 的代碼 編輯窗口,在Form1.cs 缺省的導(dǎo)入命名空間代碼之后加入: using System.Net;

接著用下列代碼替換Form1.cs 中button1 的Click 事件對 應(yīng)的處理代碼。下列代碼首先判斷給定域名(或主機(jī)名)對 應(yīng)的主機(jī)是否在線,如果在線,再進(jìn)行DNS 解析出對應(yīng)的IP 地址。如果不在線,程序都會彈出提示框并中止運(yùn)行。

private void button1_Click(object sender, System.EventArgs e) {

richTextBox1.Text = "";

try

{

IPHostEntry IPHost = Dns.GetHostByName(textBox1.Text); IPAddress [ ] address = IPHost.AddressList;

//獲取IP 地址列表

foreach(IPAddress s in address)

,

{

//顯示IP 地址

richTextBox1.Text = s.ToString() "r"

richTextBox1.Text;

}

}

catch

{

MessageBox.Show("指定IP 地址的網(wǎng)絡(luò)主機(jī)不在線" , " 警告!");

}

}

完成后全部保存,這樣“DNS 解析”項(xiàng)目的全部工作就 完成了。按下“Ctrl F5”快捷鍵運(yùn)行程序,在“請輸入 主機(jī)名或域名”文本框中輸入在線主機(jī)的主機(jī)名或域名,單 擊“獲取”按鈕,則程序會把解析出的IP 地址顯示到“IP 地 址列表”列表框中,圖

6 是程序?qū)Α皐ww.

163.com”解析后的運(yùn)

行界面:

通過“DNS 解析”

程序也可以獲取本地

機(jī)的IP 地址列表,只有

在“請輸入主機(jī)名或

域名”文本框不輸入,

此時單擊“獲取”按

鈕,則程序獲取的是

本地機(jī)的IP 地址列表, 不信你試一試。

四、總結(jié)

,

本節(jié)探討的是編寫網(wǎng)絡(luò)應(yīng)用程序中最為基本的內(nèi)容,

主要使用的是System.Net 命名空間中的Dns 類和IPHostEntry 類,這二個類雖然結(jié)構(gòu)簡單、實(shí)現(xiàn)的功能也有限,但卻是網(wǎng) 絡(luò)編程最基礎(chǔ)的類。對于這二個類中在本節(jié)沒有涉及到的方 法和屬性,也希望讀者能夠做一些嘗試,這對你深入掌握這 二個類是非常有好處的。在下一節(jié)中,將介紹線程在網(wǎng)絡(luò)編 程的重要作用,以及網(wǎng)絡(luò)編程中如何使用線程技術(shù)。這可算 上是一個難點(diǎn)噢,那就讓我們下一章再見吧!

源程序下載地址:http://www.cfan.net.cn/qikan/cfan/

source/0301csp.zip

標(biāo)簽: