用.NET解析主机名 | ||
| ||
想知道如何使用.NET的基本网络编程技术吗?让我们来告诉你吧。 网络命名空间 .NET框架的类库在System.Net和System.Net.Sockets这两个命名空间里提供了网络编程的功能。它们让你能够编写各种东西,从Internet连接到基于套接字的编程。下面就是System.Net命名空间里的几个类: ~IPAddress:用于返回IP网络上一台计算机的IP地址(xxx.xxx.xxx.xxx格式)。
名字解析 DNS类是一个静态类,让你能够轻松地从DNS里查询到特定的主机。它的使用要求Internet连接必须工作正常。DNS查询检索到的主机信息被作为IPHostEntry对象返回。如果指定的主机在DNS数据库里有多个项,那么IPHostEntry对象就有多个IP地址和别名。你可能会使用一个for循环来获得完整的地址。 下面是获得主机信息的三种可用方法:
调用这三个DNS方法中的任何一个都会返回IPHostEntry类的一个实例。下面的代码就使用CNET主机名创建了一个IPHostEntry类的实例: IPHostEntry inetServer = Dns.Resolve("www.cnet.com"); 上面的代码改用VB.NET编写就是: Dim inetServer As IPHostEntry 当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 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这两个命名空间。这些命名空间的类使得把网络功能集成到你的应用程序里变得很容易。 |