用.NET解析主机名

.NET解析主机名

 

 

 

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

网络命名空间

.NET框架的类库在System.NetSystem.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.NetDNS类一起使用会更好。一旦DNS类被用来填充IPHostEntry对象,它就会被一个或多个含有用DNS对象解析的地址的IPHost对象填充。

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

列表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值,下一代IPInterNetworkV6叫做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.NetSystem.Net.Sockets这两个命名空间。这些命名空间的类使得把网络功能集成到你的应用程序里变得很容易。

 

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值