.NET提供了兩個用于網絡編程的名空間: System.Net和System.Net.Socket.這些類和方法可以幫助我們進行網絡編程,通過網絡進行通信.通信可以是面向連接的,也可以是面向無連接的;既可以采用數據流模式,也可以采用數據報的模式.廣泛使用的TCP協議用基于數據流的通信,而UDP協議用于基于數據報的通信.
System.Net.Sokcets.Socket 是System.Net.Sockets名空間下面一個非常重要的類. 每一個套接字的實例都有一個本地的和一個遠程的端點附加在上面.本地的端點包括了當前套接字實例的連接信息.
.NET還提供了其它的一些類用于我們進行網絡編程,像IPEndPoint, IPAddress, SocketException等等. .NET 支持同步和異步兩種在客戶機和服務器之間的通信方式..NET提供了不同的方法用于支持這兩種類型的通信.同步的方法工作在阻塞模式,方法在工作完成之前是不返回的.但是異步的方法工作在非阻塞模式,但是立即返回的,可能在操作完成之前.
Dns類
Dns位于System.net名空間下,它用于創建和發送一個請求用于從DNS服務器獲取一個主機服務器的信息.當然,在訪問DNS之前,機器必須首先要連接到網絡上,當在一臺獨立的機器上執行DNS查詢時,由于無法連接到DNS服務器,就會產生一個 Systm.Net.SocketException異常.這個類的所有成員方法都是靜態的.這個類中最重要的方法是:
public static IPHostEntry GetHostByAddress(string address)
地址應該是一個用點開的正確的IP地址,這個方法返回一個IPHostEntry 實例,它包括了主機的信息.如果DNS服務器不可用,這個方法將產生一個SocketException異常.
public static string GetHostName()
這個方法返回本地機器的DNS服務器名稱.
public static IPHostEntry Resolve(string hostname)
這個方法解析一個DNS主機名稱或IP地址為一個IPHostEntry實例. 主機名稱應該是一個用點分開的IP地址,如:127.0.0.1www.rohu.com.
IPHostEntry 類
IPHostEntry 類是一個容器類,它包含INTERNET上主機的地址信息.這個類不是線程安全的.下面是這個類的幾個重要成員.
AddressList 屬性
該屬性給出一個IPAddress的數組,可以獲取或設置與主機關聯的 IP 地址列表.
Aliases 屬性
該屬性用于獲取或設置與主機關聯的別名列表。
下面的程序用到了上面提到的兩個類.
using System;
using System.Net;
using System.Net.Sockets;
class MyClient
{
public static void Main()
{
IPHostEntry IPHost = Dns.Resolve("www.rohu.com");
Console.WriteLine(IPHost.HostName);
string[] aliases = IPHost.Aliases;
Console.WriteLine(alises.Length);
IPAddress[] addr = IPHost.AddressList;
Console.WriteLine(addr.Length);
for(int i=0; i<addr.Length; i++)
{
Console.Writeline(addr[i]);
}
}
}
IPEndPoint 類
這是一個從抽象類EndPoint繼承而來的一個類,它將網絡端點表示為 IP 地址和端口號。下面展示的是這個類的使用.
IPEndPoint(long address ,int port)
IPEndPoint(IPAddress addr, int port)
IpHostEntry IPHost = Dns.Resolve("www.rohu.com");
Console.WriteLine(IPHost.HostName);
string[] aliases = IPHost.Aliases;
IPAddress[] addr = IPHost.AddressList;
Console.WriteLine(addr[0]);
EndPoint ep = new IPEndPoint(addr[0], 80);
新聞熱點
疑難解答