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重寫


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM