用Visual C#獲得計算機名稱和IP地址
2024-07-21 02:29:50
供稿:網友
visual c#是微軟公司推出的下一代程序開發語言,是微軟.net 框架中的的一個重要組成部分,在推出visual c#的過程中,微軟公司還推出了與之相對應的一個軟件開發包--.net framework sdk。此軟件開發包里面封裝了許多類、對象。visual c#就是通過調用這些類、對象來實現許多比較強大的功能。
在.net framework sdk中提供了二個可用于網絡編程的名稱空間,一個是system.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中還提供了很多面向網絡編程的的類,這些類的功能是十分巨大的,靈活運用這些類,可以開發出很多功能強大的網絡應用程序。