C#中IPAddress类/Dns类/IPHostEntry类/IPEndPoint用法简介

C#中IPAddress类/Dns类/IPHostEntry类/IPEndPoint用法简介

IP是一种普遍应用于因特网、允许不同主机能够相互找到对方的寻址协议。IP地址由4个十进制的数字号码所组成,而每一个号码的值介于0~255之间,它虽然解决了网络上计算机的识别问题,但是IP地址确不容易记,因此域名系统(DNS)被开发出来,它专门用于将IP地址转换成有意义的文字,以方便识别记忆。

 

  .Net FrameWork类库内置了相关类用于处理IP地址的问题,这些类在System.NET命名空间下。这里主要对DNS类进行详细介绍。

IPAddress类提供了对IP地址的转换、处理等功能。其Parse方法可将IP地址字符串转换为IPAddress实例。

如:IPAddress ip = IPAddress.Parse(“192.168.1.1”); 

 

IPAddress   类提供了7个只读字段:

Any        表示本地系统可用的任何IP地址

Broadcast   表示本地网络的IP广播地址

IPv6Any    Socket.Bind方法用此字段指出本地系统可用的IP地址

IPv6Loopback    表示系统的回送地址

IPv6None     表示系统上没有可用的网络接口

Loopback    表示系统的回送地址

None   表示系统上没有可用的网络接口

 

Dns类提供了一系列静态的方法,用于获取提供本地或远程域名等功能,常用方法有: 

1) GetHostAddresses方法

获取指定主机的IP地址,返回一个IPAddress类型的数组。

函数原形为:

public static IPAddress[] GetHostAddresses(string hostNameOrAddress);

例如:

IPAddress[] ip=Dns.GetHostAddresses("www.cctv.com");

listBox1.Items.AddRange(ip);

 

2) GetHostName方法

获取本机主机名。例如:string hostname = Dns.GetHostName();

 

IPHostEntry类的实例对象中包含了Internet主机的相关信息。

常用属性有:AddressList属性和HostName属性。

AddressList属性作用:获取或设置与主机关联的IP地址列表,是一个IPAddress类型的数组,包含了指定主机的所有IP地址;HostName属性则包含了服务器的主机名。

 

在Dns类中,有一个专门获取IPHostEntry对象的方法,通过IPHostEntry对象,可以获取本地或远程主机的相关IP地址。

  例如:

listBox1.Items.Add("搜狐新闻所用的服务器IP地址有:");

IPAddress[] ip = Dns.GetHostEntry("news.sohu.com").AddressList;

listBox1.Items.AddRange(ip);

listBox1.Items.Add("本机IP地址为:");

ip = Dns.GetHostEntry(Dns.GetHostName()).AddressList;

listBox1.Items.AddRange(ip);

 

在C#中,IPEndPoint类包含了应用程序连接到主机上的服务所需的IP地址和端口信息。 

IPEndPoint类常用的构造函数为:public IPEndPoint(IPAddress, int);

        其中第一个参数指定IP地址,第二个参数指定端口号。

 

C#中IPAddress和IPEndPoint的关系 

IP addresses in C#

在.Net网络库里面最大的优点就是IP地址和端口被成对处理,相比于UNIX中用的方法真是一个巨大的令人欢迎的进步。.NET定义了两个类来处理关于IP地址的问题。

One of the biggestadvantages you will notice in the .NET network library is the way IPaddress/port pairs are handled. It is a fairly straightforward process thatpresents a welcome improvement over the old, confusing UNIX way. .NET definestwo classes in the System.Net namespace to handle various types of IP address information:

·        IPAddress

·        IPEndPoint

IPAddress

一个IP地址对象用来表示一个单一的IP地址,其值同时也可以应用在许多不同的方法里面。

An IPAddress object isused to represent a single IP address. This value is then used in varioussocket methods to represent the IP address. The default constructor for IPAddress is asfollows:

publicIPAddress(long address)

实际上,默认的构造函数几乎是用不到的,因为在该类里面许多的函数可以用来构造并操作IP地址对象。其中Parser()函数经常用来构造该类。

The defaultconstructor takes a long value and converts it to an IPAddress value. In practice, the default isalmost never used. Instead, several methods in the IPAddress class can beused to create and manipulate IP addresses. The Parse() method is often used to create IPAddress instances:

IPAddressnewaddress = IPAddress.Parse("192.168.1.1");

IPEndPoint

.NET框架用IPEndPoint 对象来表示一个特定的IP地址和端口的组合,应用该对象的场景多是在讲socket绑定到本地地址或者将socket绑定到非本地地址。

The .NET Frameworkuses the IPEndPoint object to represent a specific IP address/port combination. An IPEndPoint object isused when binding sockets to local addresses, or when connecting sockets toremote addresses.

 实例解析:

IPAddress是ip,如“127.0.0.1”

IPEndPoint是ip和端口对的组合,如“127.0.0.1:80”

·        IPAddress

构造一个IP地址对象IPAddress的构造函数是 

public

IPAddress(long address)

但通常情况下用不到它,因为有简单的方法可以使用如:

方法1:

IPAddress.Any

方法2:

IPAddress.Parse("192.168.1.1");

IPAddress.Any使用你机器上一个可用ip来初始化这个IP地址对象。

IPAddress.Parse("192.168.1.1");创建IPAddress对象的一个选择

·        IPEndPoint (IP地址和端口的组合)

创建方式如:两个参数分别表示IP地址和端口号

IPEndPoint ipEndPoint=new IPEndPoint(IPAddress.Any,2112)

 

例:  IPAddress类、Dns类、IPHostEntry类和IPEndPoint类的使用方法。 

 

下面对比较重要的方法进行详细介绍。

 

  (1)GetHostAddresses方法

 

  返回指定主机的Internet协议(IP)地址。

 

  语法:

 

 

 

1
2
3
public static IPAddress[] GetHostAddresses (
  string hostNameOrAddress
)

 

 

 

  参数:

 

  hostNameOrAddress:要解析的主机名或IP地址。

 

  返回值:一个IPAddress类型的数组,该类型保存由hostNameOrAddress参数指定的主机的IP地址。

 

  (2)GetHostByAddress方法

 

  获取IP地址的DNS主机信息(以发生成重载),重载方法为为Dns.GetHostByAddress (IPAddress)和Dns.GetHostByAddress (String),下面分别进行介绍。

 

  l     Dns.GetHostByAddress (IPAddress)

 

  根据指定的IPAddress创建IPHostEntry实例。

 

  语法:

 

 

 

1
2
3
4
public static IPHostEntry GetHostByAddress
(
  IPAddress address
)

 

 

 

  参数:

 

  address:一个IPAddress。

 

  返回值:一个IPHostEntry。

 

  l     Dns.GetHostByAddress (String)

 

  根据IP地址创建IPHostEntry实例。

 

  语法:

 

 

 

1
2
3
4
public static IPHostEntry GetHostByAddress
(
  string address
)

 

 

 

  参数:

 

  address:IP地址。

 

  返回值:一个IPHostEntry实例。

 

  (3)GetHostName方法

 

  获取本地计算机的主机名。

 

  语法:

 

  public static string GetHostName ()

 

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

 

  (4)Resolve方法

 

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

 

  语法:

 

 

 

1
2
3
4
public static IPHostEntry Resolve
(
  string hostName
)

 

 

 

  参数:

 

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

 

  返回值:一个IPHostEntry实例,包含有关hostName中指定的主机的地址信息。

 

  下面列举几种常用的DNS类的使用方法。

 

  获得主机名的实现代码如下:

 

 

 

1
2
3
4
5
6
7
private void button1_Click(object sender, EventArgs e)
 {
   String hostName = Dns.GetHostName();
   IPHostEntry ipH = new IPHostEntry();
   ipH = Dns.Resolve(hostName);
   this.textBox1.Text = hostName;
 }

 

 

 

  根据IP或计算机名获得计算机名的实现代码如下:

 

 

 

1
2
3
4
5
6
private void button2_Click(object sender, EventArgs e)
   {
     IPHostEntry hostInfo = Dns.Resolve(this.textBox1.Text.Trim().ToString());
     string strHost = hostInfo.HostName.ToString();
     MessageBox.Show(strHost);
   }

 

 

 

  获得IP列表的实现代码如下:

 

 

 

1
2
3
4
5
6
7
private void button4_Click(object sender, EventArgs e)
    {
      IPHostEntry IPH = Dns.GetHostByName(this.textBox1.Text);
      IPAddress[] myIp = IPH.AddressList;
      foreach (IPAddress ips in myIp)
        MessageBox.Show(ips.ToString());
    }
<br><br> // DNS类:在.net中的System.net命名空间下,主要的功能是从 Internet 域名系统 (DNS) 检索关于特定主机的信息。<br> // IPHostEntry类:将一个域名系统 (DNS) 主机与一组别名和一组匹配的 IP 地址关联,和DNS类一起使用。
<br> // IPAddress 类:IP 网络上的地址。
<br><br>1、一个域名只能绑定一个网站,多个域名可以绑定同一个站点
<br>2、一个域名可以免费分出10个子域名,超过10要另收费,每个子域名都是相互独立的
<br>3、子域名的申请和解悉都要到你的域名所在服务商(万网\新网\其它)提供的域名管理平台上操作
<br>4、子域名绑定要在空间服务商的平台下操作
<br>5、如果只有一个空间,可以考虑URL重写
posted @ 2017-05-16 15:38  君莫笑·秋  阅读(7041)  评论(0编辑  收藏  举报