荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: tiny (寂寞一星期), 信区: DotNET
标  题: 用Visual C#获得计算机名称和IP地址
发信站: 荔园晨风BBS站 (Thu Dec  6 15:36:43 2001), 转信

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中还提供了很多面向网络编程的的类,这些类的功能是
十分巨大的,灵活运用这些类,可以开发出很多功能强大的网络应用程序。


--
欢迎光临2000计算机B班主页
http://192.168.14.123/2kcom

感谢所有为班级主页努力的同学

※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.0.158]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店