Visual C#是微軟公司推出的下一代程序開(kāi)發(fā)語(yǔ)言,是微軟.Net 框架中的的一個(gè)重要組成部分,在推出Visual C#的過(guò)程中,微軟公司還推出了與之相對(duì)應(yīng)的一個(gè)軟件開(kāi)發(fā)包--.Net FrameWork SDK。此軟件開(kāi)發(fā)包里面封裝了許多類、對(duì)象。Visual C#就是通過(guò)調(diào)用這些類、對(duì)象來(lái)實(shí)現(xiàn)許多比較強(qiáng)大的功能。 在.Net FrameWork SDK中提供了二個(gè)可用于網(wǎng)絡(luò)編程的名稱空間,一個(gè)是System.Net,另一個(gè)是System..Net.Socket。本文就是利用第一個(gè)名稱空間中封裝的類和對(duì)象來(lái)讀取本地計(jì)算機(jī)名稱和機(jī)器中所有的IP地址。 一.概述: 我們知道對(duì)于一臺(tái)計(jì)算機(jī)來(lái)說(shuō),他只有一個(gè)計(jì)算機(jī)名稱,但是他可以有多個(gè)IP地址。例如當(dāng)計(jì)算機(jī)通過(guò)撥號(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地址了。本文就是來(lái)探索一下如何讀取此二個(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名稱空間,然后通過(guò)調(diào)用Dns類中的GetHostName ( )方法讀取本地計(jì)算機(jī)名稱,具體實(shí)現(xiàn)的主要語(yǔ)句如下: label1.Text = "主機(jī)名稱:" + System.Net.Dns.GetHostName ( ) ; (2).讀取計(jì)算機(jī)的撥號(hào)上網(wǎng)臨時(shí)的IP地址和局域網(wǎng)分配的固定IP地址: 在程序設(shè)計(jì)中,我們是通過(guò)一個(gè)自定義的函數(shù)--getIPAddress ( )來(lái)讀取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)語(yǔ)句如下: 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)過(guò)以下編譯命令編譯后, 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)說(shuō)了,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é): 本文是通過(guò)二個(gè)例子來(lái)讀出機(jī)器的計(jì)算機(jī)名稱和不同的IP地址,通過(guò)以上二個(gè)例子,我們可以看到如果機(jī)器有三個(gè)或者更多的IP地址,我們也可以通過(guò)設(shè)定AddressList的不同值來(lái)得到機(jī)器不同的IP地址。 在名稱空間System.Net中還提供了很多面向網(wǎng)絡(luò)編程的的類,這些類的功能是十分巨大的,靈活運(yùn)用這些類,可以開(kāi)發(fā)出很多功能強(qiáng)大的網(wǎng)絡(luò)應(yīng)用程序。
|