c#网络编程之------------DNS编程

类别:.NET开发 点击:0 评论:0 推荐:

System.Net名称空间包含了DNS类,它可以提供了编写DNS所需要的函数。下面讲解DNS类的一些方法以及在C#中如何利用该类编写程序。

一、    同步方法

在DNS类中定义了四个同步方法:GetHostName()、GetHostByName()、GetHostByAddress()、Resolve()。下面分别讲解。

1public static string GetHostName();

功能:获取本地计算机的主机名。

返回值:字符串,包含本地计算机的 DNS 主机名。

2、public static IPHostEntry GetHostByName(string hostName)

功能:获取指定 DNS 主机名的 DNS 信息。

参数:包含主机的 DNS 名的字符串

using System;

using System.Net;

class GetDNSHostInfo

{

  public static void Main(string[] argv)

  {

   if (argv.Length != 1)

   {

    Console.WriteLine("Usage: GetDNSHostInfo hostname");

    return;

   }

   IPHostEntry results = Dns.GetHostByName(argv[0]);

   Console.WriteLine("Host name: {0}",results.HostName);

   foreach(string alias in results.Aliases)

   {

     Console.WriteLine("Alias: {0}", alias);

   }

   foreach(IPAddress address in results.AddressList)

   {

     Console.WriteLine("Address: {0}", address.ToString());

   }

  }

}

注:IPHostEntry(为 Internet 主机地址信息提供容器类)属性介绍:

AddressList:获取或设置与主机关联的 IP 地址列表。

Aliases:获取或设置与主机关联的别名列表。

HostName:获取或设置主机的 DNS 名称。

3GetHostByAddress()

功能:获取 IP 地址的 DNS 主机信息。

public static IPHostEntry GetHostByAddress(IPAddress);

public static IPHostEntry GetHostByAddress(string);

using System;

using System.Net;

class GetDNSAddressInfo

{

  public static void Main(string)[] argv)

  {

   if (argv.Length != 1)

   {

     Console.WriteLine("Usage: GetDNSAddressInfo address");

     return;

   }

   IPAddress test = IPAddress.Parse(argv[0]);

   IPHostEntry iphe = Dns.GetHostByAddress(test);

   Console.WriteLine("Information for {0}", test.ToString());

   Console.WriteLine("Host name: {0}", iphe.HostName);

   foreach(string alias in iphe.Aliases)

   {

     Console.WriteLine("Alias: {0}", alias);

   }

   foreach(IPAddress address in iphe.AddressList)

   {

     Console.WriteLine("Address: {0}", address.ToString());

   }

  }

}

注:IPAddress,提供网际协议 (IP) 地址。

 

4public static IPHostEntry Resolve(string hostName)

功能:将 DNS 主机名或 IP 地址解析为 IPHostEntry 实例。

参数:DNS 样式的主机名或 IP 地址。

备注:Resolve 方法在 DNS 服务器中查询与主机名或 IP 地址相关联的 IP 地址。当 hostName 是 DNS 样式的主机名并且与多个 IP 地址关联时,仅返回解析为该主机名的第一个 IP 地址。

using System;

using System.Net;

class GetResolveInfo

{

  public static void Main(string[] argv)

  {

   if (argv.Length != 1)

   {

     Console.WriteLine("Usage: GetResolveInfo address");

     return;

   }

   IPHostEntry iphe = Dns.Resolve(argv[0]);

   Console.WriteLine("Information for {0}", argv[0]);

   Console.WriteLine("Host name: {0}", iphe.HostName);

   foreach(string alias in iphe.Aliases)

   {

     Console.WriteLine("Alias: {0}", alias);

   }

   foreach(IPAddress address in iphe.AddressList)

   {

     Console.WriteLine("Address: {0}",address.ToString());

   }

  }

}

 

二、     异步方法

在DNS中定义了四个异步方法: BeginGetHostByName()、BeginResolve()、EndGetHostByName()、EndResolve()

使用范例:

using System;

using System.Drawing;

using System.Net;

using System.Text;

using System.Windows.Forms;

class AsyncResolve  Form:

{

  TextBox address;

  ListBox results;

  private AsyncCallback OnResolved;

  public AsyncResolve()

  {

   Text = "DNS Address Resolver";

   Size = new Size(400,380);

   OnResolved = new AsyncCallback(Resolved);

   Label label1 = new Label();

   label1.Parent = this;

   label1.Text = "Enter address to resolve:";

   label1.AutoSize = true;

   label1.Location = new Point(10, 10);

   address = new TextBox();

   address.Parent = this;

   address.Size = new Size(200, 2 * Font.Height);

   address.Location = new Point(10, 35);

   results = new ListBox();

   results.Parent = this;

   results.Location = new Point(10, 65);

   results.Size = new Size(350, 20 * Font.Height);

   Button checkit = new Button();

   checkit.Parent = this;

   checkit.Text = "Resolve";

   checkit.Location = new Point(235,32);

   checkit.Size = new Size(7 * Font.Height, 2 * Font.Height);

   checkit.Click += new EventHandler(ButtonResolveOnClick);

  }

  void ButtonResolveOnClick(object obj, EventArgs ea)

  {

   results.Items.Clear();

   string addr = address.Text;

   Object state = new Object();

   Dns.BeginResolve(addr, OnResolved, state);

  }

  private void Resolved(IAsyncResult ar)

  {

   string buffer;

   IPHostEntry iphe = Dns.EndResolve(ar);

   buffer = "Host name: " + iphe.HostName;

   results.Items.Add(buffer);

   foreach(string alias in iphe.Aliases)

   {

     buffer = "Alias: " + alias;

     results.Items.Add(buffer);

   }

   foreach(IPAddress addrs in iphe.AddressList)

   {

     buffer = "Address: " + addrs.ToString();

     results.Items.Add(buffer);

   }

  }

  public static void Main()

  {

   Application.Run(new AsyncResolve());

  }

}

 

本文地址:http://com.8s8s.com/it/it42671.htm