來自http://www.ddvip.net/program/c-/index5/26.htm
Visual C#是微軟公司推出的下一代程式開發語言,是微軟.Net 架構中的的一個重要組成部分,在推出Visual C#的過程中,微軟公司還推出了與之相對應的一個軟體開發包--.Net FrameWork SDK。此軟體開發包裡面封裝了許多類、對象。Visual C#就是通過調用這些類、對象來實現許多比較強大的功能。
在.Net FrameWork SDK中提供碩隹捎糜諭綾喑痰拿瓶占洌桓鍪荢ystem.Net,另一個是System..Net.Socket。本文就是利用第一個名稱空間中封裝的類和對象來讀取本機電腦名稱和機器中所有的IP地址。
一.概述:
我們知道對於一台電腦來說,他只有一個電腦名稱,但是他可以有多個IP地址。例如當電腦通過撥接的時候,在驗證完使用者名稱和口令以後,就會動態分配一個IP地址,此時電腦就擁有了二個IP地址,一個時自己設定的區域網路用的IP地址,另外一個就是撥接動態分配的IP地址了。本文就是來探索一下如何讀取此二個IP地址和電腦名稱。
二.程式設計和啟動並執行環境:
(1)微軟公司視窗2000 伺服器 版
(2).Net FrameWrok SDK Beta 2版
三.程式設計的主要思路及實現方法:
(1).讀取電腦的名稱:
在名稱空間System.Net中定義了一個類Dns,在此類中定義了一個比較重要的方法 GetHostName ( ),此方法的傳回值就是本機電腦名稱。在程式設計中首先要匯入System.Net名稱空間,然後通過調用Dns類中的GetHostName ( )方法讀取本機電腦名稱,具體實現的主要語句如下:
label1.Text = "主機名稱:" + System.Net.Dns.GetHostName ( ) ;
(2).讀取電腦的撥接臨時的IP地址和區域網路分配的固定IP地址:
在程式設計中,我們是通過一個自訂的函數--getIPAddress ( )來讀取IP地址的。首先看一下如何讀取本地固定的IP地址的。在Dns類中還定義了一個方法GetHostByName ( )。此方法的傳回值時IPHostEntry 對象,此對象有一個屬性是AddressList,此屬性是一個IPAddress類型的數組,包含了電腦此時的所有的IP地址資訊。這當中也就包含了撥接得到的臨時分配的IP地址和區域網路固定的IP地址。具體實現語句如下:
private static string getIPAddress ( ) { System.Net.IPAddress addr; // 獲得本機區域網路IP地址 addr = new System.Net.IPAddress ( Dns.GetHostByName ( Dns.GetHostName ( ) ) .AddressList [0].Address ) ; return addr.ToString ( ) ; } |
四.讀取電腦名稱本機固定IP地址來源程式
IP01.cs來源程式:
//匯入程式用到的名稱空間 using System ; using System.Net; using System.Windows.Forms ; using System.Drawing ; public class Form3 : Form { //定義二個標籤 private Label label1 ; private Label label2 ; public static void Main ( ) { Application.Run ( new Form3 ( ) ) ; } // 構造表單 public Form3 ( ) { // 建立標籤並且初始化 this.label1 = new System.Windows.Forms.Label ( ) ; this.label2 = new System.Windows.Forms.Label ( ) ; //先繼承一個Label 類 label1.Location = new System.Drawing.Point ( 24 , 16 ) ; label2.Location = new System.Drawing.Point ( 44 , 36 ) ; //設定 Label的顯示位置 label1.Text = "主機名稱:" + System.Net.Dns.GetHostName ( ) ; // 顯示原生電腦名稱 label2.Text = "IP 位址:" + getIPAddress ( ) ; // 顯示原生區域網路IP地址 label1.Size = new System.Drawing.Size ( 200 , 50 ) ; label2.Size = new System.Drawing.Size ( 200 , 80 ) ; //設定標籤的大小 label1.TabIndex = 0 ; label2.TabIndex = 1 ; label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter ; label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter ; // 設定標籤的對齊 this.Text = "獲得主機名稱和IP地址!" ; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent ; this.AutoScaleBaseSize = new System.Drawing.Size ( 8 , 16 ) ; this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D ; // 設定表單的邊界類型 this.ForeColor = System.Drawing.SystemColors.Desktop ; this.Font = new System.Drawing.Font ( "宋體" , 10 , System.Drawing.FontStyle.Bold ) ; // 設定字型、大小就字型的式樣 this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide ; this.ClientSize = new System.Drawing.Size ( 250 , 250 ) ; //把標籤加到表單中 this.Controls.Add ( this.label1 ) ; this.Controls.Add ( this.label2 ) ; } private static string getIPAddress ( ) { System.Net.IPAddress addr; // 獲得本機區域網路IP地址 addr = new System.Net.IPAddress ( Dns.GetHostByName ( Dns.GetHostName ( ) ) .AddressList [0].Address ) ; return addr.ToString ( ) ; } } |
在經過以下編譯命令編譯後,
csc /r:system.dll /r:system.windows.forms.dll /r:system.drawing.dll /t:winexeip01.cs
得到ip01.exe檔案,此檔案就可以讀取本地固定的IP地址。以下是執行後的介面:
圖01:讀取電腦名稱和固定IP地址
五.讀取電腦名稱和撥接動態分配的IP地址來源程式
在前面已經說了,GetHostByName ( )方法的傳回值時IPHostEntry 對象,此對象的屬性 AddressList,是一個IPAddress類型的數組,包含了電腦此時的所有的IP地址資訊。在ip01.cs中AddressList [0].Address是固定的IP地址,而對於上網動態分配的IP地址是.AddressList [1].Address。據此我們可以的得到讀取撥接動態分配的IP地址的來源程式:
IP02.cs來源程式:
//匯入程式用到的名稱空間 using System ; using System.Net; using System.Windows.Forms ; using System.Drawing ; public class Form3 : Form { //定義二個標籤 private Label label1 ; private Label label2 ; public static void Main ( ) { Application.Run ( new Form3 ( ) ) ; } // 構造表單 public Form3 ( ) { // 建立標籤並且初始化 this.label1 = new System.Windows.Forms.Label ( ) ; this.label2 = new System.Windows.Forms.Label ( ) ; //先繼承一個Label 類 label1.Location = new System.Drawing.Point ( 24 , 16 ) ; label2.Location = new System.Drawing.Point ( 44 , 36 ) ; //設定 Label的顯示位置 label1.Text = "主機名稱:" + System.Net.Dns.GetHostName ( ) ; // 顯示原生電腦名稱 label2.Text = "IP 位址:" + getIPAddress ( ) ; // 顯示原生撥號動態分配IP地址 label1.Size = new System.Drawing.Size ( 200 , 50 ) ; label2.Size = new System.Drawing.Size ( 200 , 80 ) ; //設定標籤的大小 label1.TabIndex = 0 ; label2.TabIndex = 1 ; label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter ; label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter ; // 設定標籤的對齊 this.Text = "獲得主機名稱和IP地址!" ; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent ; this.AutoScaleBaseSize = new System.Drawing.Size ( 8 , 16 ) ; this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D ; // 設定表單的邊界類型 this.ForeColor = System.Drawing.SystemColors.Desktop ; this.Font = new System.Drawing.Font ( "宋體" , 10 , System.Drawing.FontStyle.Bold ) ; // 設定字型、大小就字型的式樣 this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide ; this.ClientSize = new System.Drawing.Size ( 250 , 250 ) ; //把標籤加到表單中 this.Controls.Add ( this.label1 ) ; this.Controls.Add ( this.label2 ) ; } private static string getIPAddress ( ) { System.Net.IPAddress addr; // 獲得撥號動態分配IP地址 addr = new System.Net.IPAddress ( Dns.GetHostByName ( Dns.GetHostName ( ) ) .AddressList [1].Address ) ; return addr.ToString ( ) ; } } |
編譯完成後,執行可得到如下運行介面:
圖02:讀取電腦名稱和動態IP地址
六.總結:
本文是通過二個例子來讀出機器的電腦名稱和不同的IP地址,通過以上二個例子,我們可以看到如果機器有三個或者更多的IP地址,我們也可以通過設定AddressList的不同值來得到機器不同的IP地址。
在名稱空間System.Net中還提供了很多面向網路編程的的類,這些類的功能是十分巨大的,靈活運用這些類,可以開發出很多功能強大的網路應用程式。