开发者社区


C++/C | Java | .Net/Windows | Linux/Unix | 开源 | 其他
首页 - 编程
编程
全文搜索:   

用.NET解析主机名
作者: Builder.com
2006-02-10 09:40:00


想知道如何使用.NET的基本网络编程技术吗?让我们来告诉你吧。

网络命名空间

.NET框架的类库在System.Net和System.Net.Sockets这两个命名空间里提供了网络编程的功能。它们让你能够编写各种东西,从Internet连接到基于套接字的编程。下面就是System.Net命名空间里的几个类:

~IPAddress:用于返回IP网络上一台计算机的IP地址(xxx.xxx.xxx.xxx格式)。

  • DNS:提供简单的域名解析功能。如果DNS表里有多个项,就返回多个实例。
  • IPHostEntry:微软的帮助(Microsoft Help)把IPHostEntry这个类定义为Internet主机地址信息的容器。它把一组DNS主机名同一组IP地址对应起来。它用来帮助DNS类。

名字解析

DNS类是一个静态类,让你能够轻松地从DNS里查询到特定的主机。它的使用要求Internet连接必须工作正常。DNS查询检索到的主机信息被作为IPHostEntry对象返回。如果指定的主机在DNS数据库里有多个项,那么IPHostEntry对象就有多个IP地址和别名。你可能会使用一个for循环来获得完整的地址。

下面是获得主机信息的三种可用方法:

  • GetHostByName:利用传递给方法的名字检索主机。
  • GetHostByAddress:利用传递给方法的地址检索主机。
  • GetHostName:返回分配给主机的名字。

调用这三个DNS方法中的任何一个都会返回IPHostEntry类的一个实例。下面的代码就使用CNET主机名创建了一个IPHostEntry类的实例:

IPHostEntry inetServer = Dns.Resolve("www.cnet.com");

上面的代码改用VB.NET编写就是:

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

当IPHostEntry对象填充了IP地址之后,我们可以把它们用作IPAddress对象。

使用IP地址

IPAddress类使得使用IP网络地址变得很容易。将IP地址用作构造函数可以很容易地给这个类创建新的实例,但是把它与System.Net的DNS类一起使用会更好。一旦DNS类被用来填充IPHostEntry对象,它就会被一个或多个含有用DNS对象解析的地址的IPHost对象填充。

列表A(C#控制台应用程序)可以访问这些对象。

列表A

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

这个例子会调用微软的Internet域名并处理指定给它的IP地址列表。此外,它还会返回用于每个IP地址的地址族。这是给当前IP版本可能的InterNetwork值,下一代IP的InterNetworkV6叫做IPv6。输出见列表B

列表B

Output:

AddressFamily: InterNetwork
Address: 207.46.250.252

AddressFamily: InterNetwork
Address: 207.46.144.222

AddressFamily: InterNetwork
Address: 207.46.156.188

AddressFamily: InterNetwork
Address: 207.46.156.220

AddressFamily: InterNetwork
Address: 207.46.156.252

AddressFamily: InterNetwork
Address: 207.46.244.188

AddressFamily: InterNetwork
Address: 207.46.245.92

AddressFamily: InterNetwork
Address: 207.46.249.252

VB.NET版本见列表C

列表C

Imports System
Imports System.Net
Module Module1
Sub Main()
Try
Dim iphe As IPHostEntry
Dim addr As IPAddress
iphe = Dns.Resolve("www.microsoft.com")
For Each addr In iphe.AddressList
Console.WriteLine("AddressFamily: " + _
addr.AddressFamily.ToString())
Console.WriteLine("Address: " + _
addr.ToString())
Next
Catch ex As Exception
Console.WriteLine("Error: " + ex.ToString())
End Try
End Sub
End Module

这种方法还可以被用来寻找当前机器的地址。这是通过使用Dns类的GetHostName方法实现的。列表D里有一个VB.NET控制台应用程序,用来返回当前机器的IP地址和机器名。

列表D

Imports System
Imports System.Net
Module Module1
Sub Main()
Dim i As Integer
Dim currentMachine As String
currentMachine = Dns.GetHostName()
Console.WriteLine("Host Name: " + currentMachine)
Dim iphe As IPHostEntry
iphe = Dns.GetHostByName(currentMachine)
Dim ipAddresses() As IPAddress = iphe.AddressList
For i = 0 To ipAddresses.GetUpperBound(0)
Console.Write("IP Addresses :  ", i, ipAddresses(i).ToString)
Next i
End Sub
End Module

 

在我的开发用计算机上(运行在内部网络上),它会生成下面的输出结果:

Host Name: pentium4
IP Addresses 0: 192.168.1.101

C#的版本见列表E

列表E

using System;
using System.Net;
namespace CSharpIPExample {
class Class1 {
static void Main(string[] args) {
string currentMachine;
IPHostEntry iphe;
currentMachine = Dns.GetHostName();
Console.WriteLine("Host Name: " + currentMachine);
iphe = Dns.GetHostByName(currentMachine);
IPAddress[] ipAddresses = iphe.AddressList;
for (int i = 0; i < ipAddresses.GetUpperBound(0); i++) {
Console.WriteLine("IP Addresses  : ", i, ipAddresses[i].ToString());
} } } }

总结

.NET框架为使用网络函数提供了System.Net和System.Net.Sockets这两个命名空间。这些命名空间的类使得把网络功能集成到你的应用程序里变得很容易。

责任编辑:张琎

查看本文的国际来源

 

声明:
Builder.com.cn(原ZDNet China应用开发频道)原创文章版权所有,未经许可严禁转载,且不构成投资建议。
近期相关报道:
实用技术文档
J2me XML
C/C++ C#
Java Oracle
Mysql .Net
VB.NET CSS
SQL Server 数据库
SQL UNIX
Linux Jsp
PHP Perl
Javascript IIS
XHTML ColdFusion
ASP/ASP.NET Apache
AJAX
订阅技术邮件
订阅"技术圈"杂志!请在下面选择您感兴趣的专题,填写e-mail地址,然后按订阅按钮:
应用开发管理
VS.NET 周刊
Database 周刊
WEB Service周刊
JAVA 周刊
IT 认证
Windows服务器周刊
互联网开发
当Windows Server 2008专家得5000元现金大奖
CNET NETWORKS 中国: 爱卡汽车网 | CNET科技资讯网 | e询网 | CWEEK | 蜂鸟网 | GameSpot China | 个人电脑 | PChome | SPN | 网友世界 | ZDNet China | 中关村在线
CNET NETWORKS 美国: BNET | CNET.com | CNET Download.com | CNET News.com | CNET Reviews | CNET Shopper.com | GameSpot | MP3.com | mySimon | Release 1.0 | Search.com | TechRepublic | TV.com | Webshots | ZDNet
Copyright (c) 2006 CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
ZDNet 公司标识是 CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号