ip域名互換
計算機名稱和IP 地址對于運行TCP/IP 協(xié)議的網(wǎng)絡主機來說,是兩個最重要的標識。所以獲取計算機的名稱和IP 地 址,也就成為了網(wǎng)絡編程的基礎。本節(jié)就來介紹如何使用 C# 獲取計算機名稱和IP 地址
計算機名稱和IP 地址對于運行TCP/IP 協(xié)議的網(wǎng)絡主機
來說,是兩個最重要的標識。所以獲取計算機的名稱和IP 地 址,也就成為了網(wǎng)絡編程的基礎。本節(jié)就來介紹如何使用 C# 獲取計算機名稱和IP 地址。
一、獲取本地計算機名稱
要使用C#獲取本地計算機名稱,一般有兩種方法:第
一,通過NetBIOS 來獲取本地計算機名稱;第二,通過DNS 來獲取本地計算機名稱。NetBIOS 是一種非常古老的網(wǎng)絡協(xié) 議,它是為了和IBM NetBIOS 兼容而引進的。NetBIOS 是建 立在BIOS 基礎之上,并對之進行了擴展,使之能夠支持網(wǎng) 絡上的I/O 調用。
通過NetBIOS 來獲取本地計算機名稱要使用到System 命
名空間中的Environment 類。Environment 類主要提供有關當前 環(huán)境和平臺的信息以及操作它們的方法。通過NetBIOS 獲取 本地計算機名稱使用的是Environment 類的MachineName 屬 性。Environment 類還提供了一些的屬性用以獲取和計算機相 關的其他重要信息,常用屬性如表1 所示:

通過D N S 來獲取本地計算機名稱是使用命名空間
“System.Net”中的“Dns”類?!癉ns”類是一個靜態(tài)類,它 提供簡單的域名解析功能。它可以實現(xiàn)從Internet 域名系統(tǒng) (DNS )檢索關于特定主機的信息。獲取網(wǎng)絡計算機名稱和 DNS 解析,都要使用到Dns 類。通過DNS 獲取本地計算機名 稱使用的是Dns 類中的“GetHostName”。在Dns 類中還提供 了一些其他的方法,用以實現(xiàn)簡單的域名解析功能,具體如 表2 所示:
,
下面就通過一個的實例來具體介紹這二種獲取本地計 算機名稱方法。
首先啟動Visual Studio.Net,依次選擇菜單“文件”、“新 建”、“項目”后,在彈出的“新建項目”對話框中,將“項 目類型”設置為“Visual C# 項目”,將“模板”設置為
“Windows 應用程序”,在“名稱”文本框中輸入“獲取本地計 算機名稱”,在“位置”文
本框中輸入“E:VS.NET項
目”,然后單擊“確定”按
鈕。這樣“獲取本地計算機
名稱”的項目文件就創(chuàng)建完
成了。
把當前窗口切換到
“Form1.cs(設計)”窗口,
如圖1設計窗體,其他的都
采用默認值:
單擊button1 將通過NetBIOS 獲取并顯示本地計算機名 稱,所以我們這樣填寫button1 的Click

事件:
,private void button1_Click(object sender, System.EventArgs e) {
string hostName = System.Environment.MachineName;
textBox1.Text = hostName;
}
單擊button2將通過DNS 獲取并顯示本地計算機名稱,所
以我們這樣填寫button2 的Click 事件:
private void button2_Click(object sender, System.EventArgs e) {
string hostName =
System.Net.Dns.GetHostName( ); textBox2.Text = hostName;
}
完成后全部保存,
這樣“獲取本地計算機
名稱”項目的全部工作
就完成了。按下組合鍵
“Ctrl F5”開始運行程
序,分別單擊程序中兩
個“獲取”按鈕,就可以
實現(xiàn)通過二種不同方式
獲取本地計算機名稱,
“獲取本地計算機名稱”項目的運行界面如圖2 所示:

二、獲取網(wǎng)絡計算機名稱
要獲取網(wǎng)絡計算機名稱,前提條件是要知道網(wǎng)絡計算
機的IP 地址,然后通過IP 地址查詢出網(wǎng)絡計算機的名稱。獲
,取網(wǎng)絡中計算機名稱要比獲取本地計算機名稱要復雜許多。 這是因為根據(jù)提供的IP 地址查詢網(wǎng)絡計算機名稱要使用的 Dns 類GetHostByAddress 方法,并不能直接獲取網(wǎng)絡計算機 名稱,GetHostByAddress 方法把查詢的地址信息存放到創(chuàng)建
的IPHostEntry 實例中,然后通過IPHostEntry 實例的HostName 屬性才能夠得到指定的I P 地址對應的網(wǎng)絡主機名稱。
IPHostEntry 類也是編寫網(wǎng)絡應用程序時常用的類之一,在后 面介紹DNS 解析時也要用到,表3 是IPHostEntry 類中一些主 要的屬性:
在編寫獲取網(wǎng)絡主機名程序的時候,有兩點需要特別
注意:第一,當網(wǎng)絡主機不在線時,用上述的查詢方法將會 產生異常,所以獲取網(wǎng)絡主機名稱之前,要判斷它是否在線。 第二,判斷輸入的IP 地址是否合法,如果輸入的IP 地址并不合 法,此時程序獲取網(wǎng)絡計算機名稱,同樣也會產生異常。 下面就是根據(jù)上述思路,用C#獲取網(wǎng)絡主機名稱的具
體實現(xiàn)步驟。
首先啟動Visual Studio .Net,依次選擇“文件”、“新 建”、“項目”菜單后,在彈出“新建項目”對話框中將“項 目類型”設置為“Visual C# 項目”,將“模板”設置為
“Windows 應用程序”,在“名稱”文本框中輸入“獲取網(wǎng)絡 主機名”,在“位置”的文本框中輸入“E:VS.NET項目”,然 后單擊“確定”按鈕。這
樣,“獲取網(wǎng)絡主機名”的
項目文件就產生了。
把當前窗口切換到
“Form1.cs(設計)”窗口,
如圖3 設計窗體,其他的
都采用默認值:
再把當前窗口切換到
“Form1.cs”,進入Form1.
,c s 的代碼編輯窗口,在
Form1.cs 缺省的導入命名空間代碼之后加入:
using System.Net;

using System.Net.Sockets;
用下列代碼替換Form1.cs 中button1 的Click 事件對應的
處理代碼。下列代碼首先判斷輸入的IP 地址是否合法,如果
合法,則再判斷此IP 地址對應的網(wǎng)絡主機是否在線,如果在
線,才根據(jù)IP 地址查詢出它的名稱。上面兩個判斷,只要有
一個不成立,程序都會彈出提示框并中止程序運行:
private void button1_Click(object sender, System.EventArgs e)
{
IPAddress myIP;
//判斷IP 地址的合法性
try
{
myIP = IPAddress.Parse(textBox1.Text);
}
catch
{
MessageBox.Show("輸入的IP 地址不合法!" ,"警告!");
return;
}
//通過給定的IP 地址,進行DNS 查詢,得到遠程主機名
try
{
IPHostEntry myHost = Dns.GetHostByAddress(myIP); textBox2.Text = myHost.HostName;
,}
catch
{
MessageBox.Show( "錯誤信
息:IP 地址為" textBox1.
Text "的主機沒有響應"
," 警告!");
}
}
完成后全部保存,
這樣“獲取網(wǎng)絡主機名”
項目的全部工作就完成

了。此時按下組合鍵
表1 Environment類常用屬性及其說明
屬 性 說 明
CurrentDirectory 當前程序的完整的路徑
MachineName 本地計算機的NetBIOS 名稱
NewLine 為此環(huán)境定義的換行字符串
OSVersion 包含當前平臺標識符和版本號的OperatingSystem 對象 SystemDirectory 系統(tǒng)目錄的完整路徑
TickCount 系統(tǒng)啟動后經(jīng)過的毫秒數(shù)
UserDomainName 與當前用戶關聯(lián)的網(wǎng)絡域名
UserName 啟動當前線程的人的用戶名
表2 Dns類中常用方法及其說明
,方 法 說 明
BeginGetHostByName 開始異步請求關于指定DNS 主機名的IPHostEntry 信息 EndGetHostByName 結束對DNS 信息的異步請求
BeginResolve 開始異步請求,以便將DNS 主機名或以點分隔的四部分表示 法格式的IP 地址解析為IPAddress 實例
EndResolve 結束對DNS 信息的異步請求
GetHostByAddress 獲取IP 地址的DNS 主機信息
GetHostByName 獲取指定DNS 主機名的DNS 信息
GetHostName 獲取本地計算機的主機名
Resolve 將DNS 主機名或以點分隔的四部分表示法格式的IP 地址解 析為IPHostEntry 實例
圖

1
“Ctrl F5”運行程序,在“請輸入網(wǎng)絡計算機IP 地址”文本框
中輸入IP 地址,若此IP 地址所對應的主機在線,則單擊“獲取” 按鈕以后程序便會查詢此IP 地址對應的主機名并顯示出來。圖
4 是程序運行后的界面,其中的“202.96.170.165”地址是QQ
的某個服務器地址:
三、DNS 解析
DNS 解析就是實現(xiàn)由域名(也可以為主機名)到IP 地址
的映射功能。說得直接一點就是通過給定的域名(或主機
名),得到此計算機的對應的IP 地址。DNS 解析和獲取網(wǎng)絡
主機名的程序結構很相似。由于給定的域名(主機名)不像
IP 地址存在合法性判斷,所以在DNS 解析中這一步是沒有
的,但在準備進行DNS 解析前也要判斷給定的域名(主機名)
對應的計算機是否在線,如果不在線,貿然的獲取計算機IP
地址,則同樣也會出現(xiàn)異常。
DNS 解析使用的是Dns 類中的GetHostByName 方法,
GetHostByName 方法同樣也不能直接獲取主機IP 地址,而是
把獲取得主機地址信息存放到創(chuàng)建的IPHostEntry 實例中,通
,過IPHostEntry 實例的AddressList 屬性就可以獲取主機IP 地址 列表(因為一臺計算機的IP 地址可能有多個),這個IP 地址 列表是一個IPAddress 數(shù)組,通過遍歷這個數(shù)組就能夠獲得 計算機的所有IP 地址了。所以說DNS 解析的具體實現(xiàn)過程要 比獲取網(wǎng)絡主機名要麻煩一點。
下面就是根據(jù)上述思路,用C#進行DNS 解析的具體實
現(xiàn)步驟。
首先啟動Visual Studio.Net,依次選擇“文件”、“新建”、 “項目”菜單后,在彈出“新建項目”對話框中將“項目類 型”設置為“Visual C# 項
目”, 將“ 模板” 設置為
“Windows 應用程序”,在“名
稱”文本框中輸入“DNS解析”,
在“位置”的文本框中輸入“E:
VS.NET項目”,然后單擊“確
定”按鈕。這樣,“DNS 解析”
的項目文件就產生了。
把當前窗口切換到
“Form1.cs(設計)”窗口,如
圖5 設計窗體,其他的都采用
默認值:
再把當前窗口切換到“Form1.cs”,進入Form1.cs 的代碼 編輯窗口,在Form1.cs 缺省的導入命名空間代碼之后加入: using System.Net;
接著用下列代碼替換Form1.cs 中button1 的Click 事件對 應的處理代碼。下列代碼首先判斷給定域名(或主機名)對 應的主機是否在線,如果在線,再進行DNS 解析出對應的IP 地址。如果不在線,程序都會彈出提示框并中止運行。
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)絡主機不在線" , " 警告!");
}
}
完成后全部保存,這樣“DNS 解析”項目的全部工作就 完成了。按下“Ctrl F5”快捷鍵運行程序,在“請輸入 主機名或域名”文本框中輸入在線主機的主機名或域名,單 擊“獲取”按鈕,則程序會把解析出的IP 地址顯示到“IP 地 址列表”列表框中,圖
6 是程序對“www.
163.com”解析后的運
行界面:
通過“DNS 解析”
程序也可以獲取本地
機的IP 地址列表,只有
在“請輸入主機名或
域名”文本框不輸入,
此時單擊“獲取”按
鈕,則程序獲取的是
本地機的IP 地址列表, 不信你試一試。
四、總結
,本節(jié)探討的是編寫網(wǎng)絡應用程序中最為基本的內容,
主要使用的是System.Net 命名空間中的Dns 類和IPHostEntry 類,這二個類雖然結構簡單、實現(xiàn)的功能也有限,但卻是網(wǎng) 絡編程最基礎的類。對于這二個類中在本節(jié)沒有涉及到的方 法和屬性,也希望讀者能夠做一些嘗試,這對你深入掌握這 二個類是非常有好處的。在下一節(jié)中,將介紹線程在網(wǎng)絡編 程的重要作用,以及網(wǎng)絡編程中如何使用線程技術。這可算 上是一個難點噢,那就讓我們下一章再見吧!
源程序下載地址:http://www.cfan.net.cn/qikan/cfan/
source/0301csp.zip