使用 .NET 解析主机名

ZDNet软件频道 时间:2004-11-02 作者:Builder.com |  我要评论()
本文关键词:cpptips TonyPatton
我最近与一位不喜欢 .NET 平台的开发人员讨论了一个编程问题。他正在使用网络编程开发一个应用程序,他讽刺地说“使用 dot-not 试一下”。
本文译自Builder.com,未经许可请勿转载 我最近与一位不喜欢 .NET 平台的开发人员讨论了一个编程问题。他正在使用网络编程开发一个应用程序,他讽刺地说“使用 dot-not 试一下”。我笑着对他说这是小菜一碟,我可以使用 C#、VB.NET、J# 等几种语言来完成同一任务。我从来搞不明白为为什么开发人员认为他们的平台是最好的,因为好的程序员是超越你所使用的平台的——平台是不可避免地会改变的。现在让我们讨论一下 .NET 中的网络编程吧。

网络命名空间

.NET Framework 类库在System.Net 和System.Net.Sockets命名空间中提供了网络编程功能。这两个命名空间允许你处理从 Internet 连接和基于套接字的编程的方方面面。

下面是 System.Net 命名空间的几个类:

·         IPAddress返回一个 IP 网络上的一台计算机的 IP 地址(xxx.xxx.xxx.xxx格式)。

·         DNS提供简单的域名解析功能。如果在 DNS 表中有多个条目,返回多个实例。

·         IPHostEntry微软帮助定义IPHostEntry类作为 Internet 主机地址信息的一个容器。它使用一个别名数组和一个匹配 IP 地址数组关联到一个 DNS 主机名。这个类是 DNS 类的一个辅助类。

名称解析

DNS 类是一个静态类,它允许你很容易地从 Internet 域名系统(DNS,Internet Domain Name System)查询一台指定的主机。它要求 Internet 连接要能正确地动作。DNS 查询获取的主机信息是通过一个IPHostEntry对象返回的。如果指定的主机在 DNS 数据库中有多个条目,那么IPHostEntry对象就包含多个 IP 地址和别名。你可以使用一个 for 循环来访问所有地址。

下面是可以用来获取主机信息的三个方法:

·         GetHostByName使用传递给该方法的名称检索一个主机。

·         GetHostByAddress使用传递给该方法的地址检索一个主机。

·         GetHostName返回一台主机的名称。

调用上面任何一个 DNS 方法都会返回IPHostEntry类的一个实例。下面的代码使用指定的 CNET 主机名创建IPHostEntry的一个实例:

IPHostEntryinetServer = Dns.Resolve("www.cnet.com");

或者,其 VB.NET 等效代码:

Dim inetServer As IPHostEntry
inetServer = Dns.Resolve(www.cnet.com)

有了具有 IP 地址的IPHostEntry对象,我们就可以使用它们作为IPAddress对象。

处理 IP 地址

IPAddress类可以简化对 IP 网络地址的处理。使用一个 IP 地址作为构造器可以很简单地创建这个类的一个新实例,但是最好还是将其与System.Net 的 DNS 类相结合。一旦 DNS 类被用来填充一个IPHostEntry对象,它就使用一个或多个IPHost对象填充,这些IPHost对象包含有使用 DNS 对象解析的地址。

下面的代码列表(C# 控制台应用程序)访问这些对象:

Using System;
Using Sytem.Net;
namespace BuilderExamples {
class BuilderIPAddress {
static void Main(string[] args) {
try {
IPHostEntryiphe = Dns.Resolve("www.microsoft.com");
foreach (IPAddressaddr in iphe.AddressList) {
Console.WriteLine("AddressFamily: " + addr.AddressFamily.ToString());
Console.WriteLine("Address: " + addr.ToString());
} } catch (Exception e) {
Console.WriteLine("Error: " + e.ToString());
} } } }

 


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134