ip域名互换

计算机名称和IP 地址对于运行TCP/IP 协议的网络主机来说,是两个最重要的标识。所以获取计算机的名称和IP 地 址,也就成为了网络编程的基础。本节就来介绍如何使用 C# 获取计算机名称和IP 地址

计算机名称和IP 地址对于运行TCP/IP 协议的网络主机

来说,是两个最重要的标识。所以获取计算机的名称和IP 地 址,也就成为了网络编程的基础。本节就来介绍如何使用 C# 获取计算机名称和IP 地址。

一、获取本地计算机名称

要使用C#获取本地计算机名称,一般有两种方法:第

一,通过NetBIOS 来获取本地计算机名称;第二,通过DNS 来获取本地计算机名称。NetBIOS 是一种非常古老的网络协 议,它是为了和IBM NetBIOS 兼容而引进的。NetBIOS 是建 立在BIOS 基础之上,并对之进行了扩展,使之能够支持网 络上的I/O 调用。

通过NetBIOS 来获取本地计算机名称要使用到System 命

名空间中的Environment 类。Environment 类主要提供有关当前 环境和平台的信息以及操作它们的方法。通过NetBIOS 获取 本地计算机名称使用的是Environment 类的MachineName 属 性。Environment 类还提供了一些的属性用以获取和计算机相 关的其他重要信息,常用属性如表1 所示:

通过D N S 来获取本地计算机名称是使用命名空间

“System.Net”中的“Dns”类。“Dns”类是一个静态类,它 提供简单的域名解析功能。它可以实现从Internet 域名系统 (DNS )检索关于特定主机的信息。获取网络计算机名称和 DNS 解析,都要使用到Dns 类。通过DNS 获取本地计算机名 称使用的是Dns 类中的“GetHostName”。在Dns 类中还提供 了一些其他的方法,用以实现简单的域名解析功能,具体如 表2 所示:

,

下面就通过一个的实例来具体介绍这二种获取本地计 算机名称方法。

首先启动Visual Studio.Net,依次选择菜单“文件”、“新 建”、“项目”后,在弹出的“新建项目”对话框中,将“项 目类型”设置为“Visual C# 项目”,将“模板”设置为

“Windows 应用程序”,在“名称”文本框中输入“获取本地计 算机名称”,在“位置”文

本框中输入“E:VS.NET项

目”,然后单击“确定”按

钮。这样“获取本地计算机

名称”的项目文件就创建完

成了。

把当前窗口切换到

“Form1.cs(设计)”窗口,

如图1设计窗体,其他的都

采用默认值:

单击button1 将通过NetBIOS 获取并显示本地计算机名 称,所以我们这样填写button1 的Click

事件:

,

private void button1_Click(object sender, System.EventArgs e) {

string hostName = System.Environment.MachineName;

textBox1.Text = hostName;

}

单击button2将通过DNS 获取并显示本地计算机名称,所

以我们这样填写button2 的Click 事件:

private void button2_Click(object sender, System.EventArgs e) {

string hostName =

System.Net.Dns.GetHostName( ); textBox2.Text = hostName;

}

完成后全部保存,

这样“获取本地计算机

名称”项目的全部工作

就完成了。按下组合键

“Ctrl F5”开始运行程

序,分别单击程序中两

个“获取”按钮,就可以

实现通过二种不同方式

获取本地计算机名称,

“获取本地计算机名称”项目的运行界面如图2 所示:

二、获取网络计算机名称

要获取网络计算机名称,前提条件是要知道网络计算

机的IP 地址,然后通过IP 地址查询出网络计算机的名称。获

,

取网络中计算机名称要比获取本地计算机名称要复杂许多。 这是因为根据提供的IP 地址查询网络计算机名称要使用的 Dns 类GetHostByAddress 方法,并不能直接获取网络计算机 名称,GetHostByAddress 方法把查询的地址信息存放到创建

的IPHostEntry 实例中,然后通过IPHostEntry 实例的HostName 属性才能够得到指定的I P 地址对应的网络主机名称。

IPHostEntry 类也是编写网络应用程序时常用的类之一,在后 面介绍DNS 解析时也要用到,表3 是IPHostEntry 类中一些主 要的属性:

在编写获取网络主机名程序的时候,有两点需要特别

注意:第一,当网络主机不在线时,用上述的查询方法将会 产生异常,所以获取网络主机名称之前,要判断它是否在线。 第二,判断输入的IP 地址是否合法,如果输入的IP 地址并不合 法,此时程序获取网络计算机名称,同样也会产生异常。 下面就是根据上述思路,用C#获取网络主机名称的具

体实现步骤。

首先启动Visual Studio .Net,依次选择“文件”、“新 建”、“项目”菜单后,在弹出“新建项目”对话框中将“项 目类型”设置为“Visual C# 项目”,将“模板”设置为

“Windows 应用程序”,在“名称”文本框中输入“获取网络 主机名”,在“位置”的文本框中输入“E:VS.NET项目”,然 后单击“确定”按钮。这

样,“获取网络主机名”的

项目文件就产生了。

把当前窗口切换到

“Form1.cs(设计)”窗口,

如图3 设计窗体,其他的

都采用默认值:

再把当前窗口切换到

“Form1.cs”,进入Form1.

,

c s 的代码编辑窗口,在

Form1.cs 缺省的导入命名空间代码之后加入:

using System.Net;

using System.Net.Sockets;

用下列代码替换Form1.cs 中button1 的Click 事件对应的

处理代码。下列代码首先判断输入的IP 地址是否合法,如果

合法,则再判断此IP 地址对应的网络主机是否在线,如果在

线,才根据IP 地址查询出它的名称。上面两个判断,只要有

一个不成立,程序都会弹出提示框并中止程序运行:

private void button1_Click(object sender, System.EventArgs e)

{

IPAddress myIP;

//判断IP 地址的合法性

try

{

myIP = IPAddress.Parse(textBox1.Text);

}

catch

{

MessageBox.Show("输入的IP 地址不合法!" ,"警告!");

return;

}

//通过给定的IP 地址,进行DNS 查询,得到远程主机名

try

{

IPHostEntry myHost = Dns.GetHostByAddress(myIP); textBox2.Text = myHost.HostName;

,

}

catch

{

MessageBox.Show( "错误信

息:IP 地址为" textBox1.

Text "的主机没有响应"

," 警告!");

}

}

完成后全部保存,

这样“获取网络主机名”

项目的全部工作就完成

了。此时按下组合键

表1 Environment类常用属性及其说明

属 性 说 明

CurrentDirectory 当前程序的完整的路径

MachineName 本地计算机的NetBIOS 名称

NewLine 为此环境定义的换行字符串

OSVersion 包含当前平台标识符和版本号的OperatingSystem 对象 SystemDirectory 系统目录的完整路径

TickCount 系统启动后经过的毫秒数

UserDomainName 与当前用户关联的网络域名

UserName 启动当前线程的人的用户名

表2 Dns类中常用方法及其说明

,

方 法 说 明

BeginGetHostByName 开始异步请求关于指定DNS 主机名的IPHostEntry 信息 EndGetHostByName 结束对DNS 信息的异步请求

BeginResolve 开始异步请求,以便将DNS 主机名或以点分隔的四部分表示 法格式的IP 地址解析为IPAddress 实例

EndResolve 结束对DNS 信息的异步请求

GetHostByAddress 获取IP 地址的DNS 主机信息

GetHostByName 获取指定DNS 主机名的DNS 信息

GetHostName 获取本地计算机的主机名

Resolve 将DNS 主机名或以点分隔的四部分表示法格式的IP 地址解 析为IPHostEntry 实例

1

“Ctrl F5”运行程序,在“请输入网络计算机IP 地址”文本框

中输入IP 地址,若此IP 地址所对应的主机在线,则单击“获取” 按钮以后程序便会查询此IP 地址对应的主机名并显示出来。图

4 是程序运行后的界面,其中的“202.96.170.165”地址是QQ

的某个服务器地址:

三、DNS 解析

DNS 解析就是实现由域名(也可以为主机名)到IP 地址

的映射功能。说得直接一点就是通过给定的域名(或主机

名),得到此计算机的对应的IP 地址。DNS 解析和获取网络

主机名的程序结构很相似。由于给定的域名(主机名)不像

IP 地址存在合法性判断,所以在DNS 解析中这一步是没有

的,但在准备进行DNS 解析前也要判断给定的域名(主机名)

对应的计算机是否在线,如果不在线,贸然的获取计算机IP

地址,则同样也会出现异常。

DNS 解析使用的是Dns 类中的GetHostByName 方法,

GetHostByName 方法同样也不能直接获取主机IP 地址,而是

把获取得主机地址信息存放到创建的IPHostEntry 实例中,通

,

过IPHostEntry 实例的AddressList 属性就可以获取主机IP 地址 列表(因为一台计算机的IP 地址可能有多个),这个IP 地址 列表是一个IPAddress 数组,通过遍历这个数组就能够获得 计算机的所有IP 地址了。所以说DNS 解析的具体实现过程要 比获取网络主机名要麻烦一点。

下面就是根据上述思路,用C#进行DNS 解析的具体实

现步骤。

首先启动Visual Studio.Net,依次选择“文件”、“新建”、 “项目”菜单后,在弹出“新建项目”对话框中将“项目类 型”设置为“Visual C# 项

目”, 将“ 模板” 设置为

“Windows 应用程序”,在“名

称”文本框中输入“DNS解析”,

在“位置”的文本框中输入“E:

VS.NET项目”,然后单击“确

定”按钮。这样,“DNS 解析”

的项目文件就产生了。

把当前窗口切换到

“Form1.cs(设计)”窗口,如

图5 设计窗体,其他的都采用

默认值:

再把当前窗口切换到“Form1.cs”,进入Form1.cs 的代码 编辑窗口,在Form1.cs 缺省的导入命名空间代码之后加入: using System.Net;

接着用下列代码替换Form1.cs 中button1 的Click 事件对 应的处理代码。下列代码首先判断给定域名(或主机名)对 应的主机是否在线,如果在线,再进行DNS 解析出对应的IP 地址。如果不在线,程序都会弹出提示框并中止运行。

private void button1_Click(object sender, System.EventArgs e) {

richTextBox1.Text = "";

try

{

IPHostEntry IPHost = Dns.GetHostByName(textBox1.Text); IPAddress [ ] address = IPHost.AddressList;

//获取IP 地址列表

foreach(IPAddress s in address)

,

{

//显示IP 地址

richTextBox1.Text = s.ToString() "r"

richTextBox1.Text;

}

}

catch

{

MessageBox.Show("指定IP 地址的网络主机不在线" , " 警告!");

}

}

完成后全部保存,这样“DNS 解析”项目的全部工作就 完成了。按下“Ctrl F5”快捷键运行程序,在“请输入 主机名或域名”文本框中输入在线主机的主机名或域名,单 击“获取”按钮,则程序会把解析出的IP 地址显示到“IP 地 址列表”列表框中,图

6 是程序对“www.

163.com”解析后的运

行界面:

通过“DNS 解析”

程序也可以获取本地

机的IP 地址列表,只有

在“请输入主机名或

域名”文本框不输入,

此时单击“获取”按

钮,则程序获取的是

本地机的IP 地址列表, 不信你试一试。

四、总结

,

本节探讨的是编写网络应用程序中最为基本的内容,

主要使用的是System.Net 命名空间中的Dns 类和IPHostEntry 类,这二个类虽然结构简单、实现的功能也有限,但却是网 络编程最基础的类。对于这二个类中在本节没有涉及到的方 法和属性,也希望读者能够做一些尝试,这对你深入掌握这 二个类是非常有好处的。在下一节中,将介绍线程在网络编 程的重要作用,以及网络编程中如何使用线程技术。这可算 上是一个难点噢,那就让我们下一章再见吧!

源程序下载地址:http://www.cfan.net.cn/qikan/cfan/

source/0301csp.zip

标签: