直播中
一.概述:
我們知道對(duì)于一臺(tái)計(jì)算機(jī)來說,他只有一個(gè)計(jì)算機(jī)名稱,但是他可以有多個(gè)IP地址。例如當(dāng)計(jì)算機(jī)通過撥號(hào)上網(wǎng)的時(shí)候,在驗(yàn)證完用戶名和口令以后,就會(huì)動(dòng)態(tài)分配一個(gè)IP地址,此時(shí)計(jì)算機(jī)就擁有了二個(gè)IP地址,一個(gè)時(shí)自己設(shè)定的局域網(wǎng)用的IP地址,另外一個(gè)就是撥號(hào)上網(wǎng)動(dòng)態(tài)分配的IP地址了。本文就是來探索一下如何讀取此二個(gè)IP地址和計(jì)算機(jī)名稱。
二.程序設(shè)計(jì)和運(yùn)行的環(huán)境:
(1)微軟公司視窗2000服務(wù)器版
(2).Net FrameWrok SDK Beta 2版
三.程序設(shè)計(jì)的主要思路及實(shí)現(xiàn)方法:
(1).讀取計(jì)算機(jī)的名稱:
在名稱空間System.Net中定義了一個(gè)類Dns,在此類中定義了一個(gè)比較重要的方法 GetHostName ( ),此方法的返回值就是本地計(jì)算機(jī)名稱。在程序設(shè)計(jì)中首先要導(dǎo)入System.Net名稱空間,然后通過調(diào)用Dns類中的GetHostName ( )方法讀取本地計(jì)算機(jī)名稱,具體實(shí)現(xiàn)的主要語句如下:
label1.Text = "主機(jī)名稱:" + System.Net.Dns.GetHostName ( ) ;
(2).讀取計(jì)算機(jī)的撥號(hào)上網(wǎng)臨時(shí)的IP地址和局域網(wǎng)分配的固定IP地址:
在程序設(shè)計(jì)中,我們是通過一個(gè)自定義的函數(shù)--getIPAddress ( )來讀取IP地址的。首先看一下如何讀取本地固定的IP地址的。在Dns類中還定義了一個(gè)方法GetHostByName ( )。此方法的返回值時(shí)IPHostEntry 對(duì)象,此對(duì)象有一個(gè)屬性是AddressList,此屬性是一個(gè)IPAddress類型的數(shù)組,包含了計(jì)算機(jī)此時(shí)的所有的IP地址信息。這當(dāng)中也就包含了撥號(hào)上網(wǎng)得到的臨時(shí)分配的IP地址和局域網(wǎng)固定的IP地址。具體實(shí)現(xiàn)語句如下:
private static string getIPAddress ( )
{
System.Net.IPAddress addr;
// 獲得本機(jī)局域網(wǎng)IP地址
addr = new System.Net.IPAddress ( Dns.GetHostByName ( Dns.GetHostName ( ) ) .AddressList [0].Address ) ;
return addr.ToString ( ) ;
}
四.讀取計(jì)算機(jī)名稱本機(jī)固定IP地址源程序
IP01.cs源程序:
//導(dǎo)入程序用到的名稱空間
using System ;
using System.Net;
using System.Windows.Forms ;
using System.Drawing ;
public class Form3 : Form
{
//定義二個(gè)標(biāo)簽
private Label label1 ;
private Label label2 ;
public static void Main ( )
{
Application.Run ( new Form3 ( ) ) ;
}
// 構(gòu)造窗體
public Form3 ( )
{
// 建立標(biāo)簽并且初始化
this.label1 = new System.Windows.Forms.Label ( ) ;
this.label2 = new System.Windows.Forms.Label ( ) ;
//先繼承一個(gè)Label 類
label1.Location = new System.Drawing.Point ( 24 , 16 ) ;
label2.Location = new System.Drawing.Point ( 44 , 36 ) ;
//設(shè)定 Label的顯示位置
label1.Text = "主機(jī)名稱:" + System.Net.Dns.GetHostName ( ) ;
// 顯示本機(jī)的計(jì)算機(jī)名稱
label2.Text = "IP 地址:" + getIPAddress ( ) ;
// 顯示本機(jī)的局域網(wǎng)IP地址
label1.Size = new System.Drawing.Size ( 200 , 50 ) ;
label2.Size = new System.Drawing.Size ( 200 , 80 ) ;
//設(shè)定標(biāo)簽的大小
label1.TabIndex = 0 ;
label2.TabIndex = 1 ;
label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter ;
label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter ;
// 設(shè)定標(biāo)簽的對(duì)齊方式
this.Text = "獲得主機(jī)名稱和IP地址!" ;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent ;
this.AutoScaleBaseSize = new System.Drawing.Size ( 8 , 16 ) ;
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D ;
// 設(shè)定窗體的邊界類型
this.ForeColor = System.Drawing.SystemColors.Desktop ;
this.Font = new System.Drawing.Font ( "宋體" , 10 , System.Drawing.FontStyle.Bold ) ;
// 設(shè)定字體、大小就字體的式樣
this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide ;
this.ClientSize = new System.Drawing.Size ( 250 , 250 ) ;
//把標(biāo)簽加到窗體中
this.Controls.Add ( this.label1 ) ;
this.Controls.Add ( this.label2 ) ;
}
private static string getIPAddress ( )
{
System.Net.IPAddress addr;
// 獲得本機(jī)局域網(wǎng)IP地址
addr = new System.Net.IPAddress ( Dns.GetHostByName ( Dns.GetHostName ( ) ) .AddressList [0].Address ) ;
return addr.ToString ( ) ;
}
}
在經(jīng)過以下編譯命令編譯后,
csc /r:system.dll /r:system.windows.forms.dll /r:system.drawing.dll /t:winexeip01.cs
得到ip01.exe文件,此文件就可以讀取本地固定的IP地址。以下是執(zhí)行后的界面:
圖01:讀取計(jì)算機(jī)名稱和固定IP地址
五.讀取計(jì)算機(jī)名稱和撥號(hào)上網(wǎng)動(dòng)態(tài)分配的IP地址源程序
在前面已經(jīng)說了,GetHostByName ( )方法的返回值時(shí)IPHostEntry 對(duì)象,此對(duì)象的屬性 AddressList,是一個(gè)IPAddress類型的數(shù)組,包含了計(jì)算機(jī)此時(shí)的所有的IP地址信息。在ip01.cs中AddressList [0].Address是固定的IP地址,而對(duì)于上網(wǎng)動(dòng)態(tài)分配的IP地址是.AddressList [1].Address。據(jù)此我們可以的得到讀取撥號(hào)上網(wǎng)動(dòng)態(tài)分配的IP地址的源程序:
IP02.cs源程序:
//導(dǎo)入程序用到的名稱空間
using System ;
using System.Net;
using System.Windows.Forms ;
using System.Drawing ;
public class Form3 : Form
{
//定義二個(gè)標(biāo)簽
private Label label1 ;
private Label label2 ;
public static void Main ( )
{
Application.Run ( new Form3 ( ) ) ;
}
// 構(gòu)造窗體
public Form3 ( )
{
// 建立標(biāo)簽并且初始化
this.label1 = new System.Windows.Forms.Label ( ) ;
this.label2 = new System.Windows.Forms.Label ( ) ;
//先繼承一個(gè)Label 類
label1.Location = new System.Drawing.Point ( 24 , 16 ) ;
label2.Location = new System.Drawing.Point ( 44 , 36 ) ;
//設(shè)定 Label的顯示位置
label1.Text = "主機(jī)名稱:" + System.Net.Dns.GetHostName ( ) ;
// 顯示本機(jī)的計(jì)算機(jī)名稱
label2.Text = "IP 地址:" + getIPAddress ( ) ;
// 顯示本機(jī)的撥號(hào)動(dòng)態(tài)分配IP地址
label1.Size = new System.Drawing.Size ( 200 , 50 ) ;
label2.Size = new System.Drawing.Size ( 200 , 80 ) ;
//設(shè)定標(biāo)簽的大小
label1.TabIndex = 0 ;
label2.TabIndex = 1 ;
label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter ;
label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter ;
// 設(shè)定標(biāo)簽的對(duì)齊方式
this.Text = "獲得主機(jī)名稱和IP地址!" ;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent ;
this.AutoScaleBaseSize = new System.Drawing.Size ( 8 , 16 ) ;
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D ;
// 設(shè)定窗體的邊界類型
this.ForeColor = System.Drawing.SystemColors.Desktop ;
this.Font = new System.Drawing.Font ( "宋體" , 10 , System.Drawing.FontStyle.Bold ) ;
// 設(shè)定字體、大小就字體的式樣
this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide ;
this.ClientSize = new System.Drawing.Size ( 250 , 250 ) ;
//把標(biāo)簽加到窗體中
this.Controls.Add ( this.label1 ) ;
this.Controls.Add ( this.label2 ) ;
}
private static string getIPAddress ( )
{
System.Net.IPAddress addr;
// 獲得撥號(hào)動(dòng)態(tài)分配IP地址
addr = new System.Net.IPAddress ( Dns.GetHostByName ( Dns.GetHostName ( ) ) .AddressList [1].Address ) ;
return addr.ToString ( ) ;
}
}
編譯完成后,執(zhí)行可得到如下運(yùn)行界面:
圖02:讀取計(jì)算機(jī)名稱和動(dòng)態(tài)IP地址
六.總結(jié):
本文是通過二個(gè)例子來讀出機(jī)器的計(jì)算機(jī)名稱和不同的IP地址,通過以上二個(gè)例子,我們可以看到如果機(jī)器有三個(gè)或者更多的IP地址,我們也可以通過設(shè)定AddressList的不同值來得到機(jī)器不同的IP地址。
在名稱空間System.Net中還提供了很多面向網(wǎng)絡(luò)編程的的類,這些類的功能是十分巨大的,靈活運(yùn)用這些類,可以開發(fā)出很多功能強(qiáng)大的網(wǎng)絡(luò)應(yīng)用程序。