C# Socket編程(2)識別網絡主機


  通過前面的筆記我們可以知道:一個客戶端想要發起一次通信,先決條件就是需要知道運行着服務器端程序的主機的IP地址是多少,端口號是多少。然后我們才能夠通過這個地址向服務器特定的應用程序發送信息。對於網絡上的兩台計算機來說,用戶操作的計算機稱為本地主機,與該計算機通信的另一台計算機稱為遠程主機。識別遠程主機依靠兩部分組成:一是主機標識,用於識別與本地主機通信的遠程主機;二是端口號,用於識別是再和遠程主機中的哪個進程通信。

閱讀目錄:

  1.獲取主機地址信息

  2.獲取網卡信息和網絡檢測  

      2.1 獲取網卡信息 

      2.2 網絡流量檢測

      2.3 網絡連接檢測

  3.參考資料

   示例下載

        

1.獲取主機地址信息  

  在C#開發中System.Net命名空間為網絡上使用的多種協議提供了簡單的編程接口。我們可以利用這個命名空間下的類,編寫基於網絡標准協議的應用程序時,不必去考慮各種不同協議的具體細節。在獲取主機(local和remote)地址信息時,我們需要使用和學習這幾個最基本的類(更加詳細API可以參考MSDN,下面會給出對應鏈接),用它們來實現相關的功能。

  • 提供網際協議的IP地址的IPAddress
  • 包含IP地址和端口號的IPEndPoint
  • 為Internet主機提供信息容器的IPHostEntry
  • 提供簡單的域名解析功能的Dns

  說千遍不如做一遍,學習編程的最好方式就是自己動手實踐,下面我們通過創建一個簡單的Windows Forms示例程序(下載地址在博文末尾)來學習如何獲取網絡主機的地址信息,下面是示例的示例代碼主要代碼:

 1             //獲取本地主機名
 2             string localHostName = Dns.GetHostName();
 3 
 4             //通過主機名獲取該主機下存儲所有IP地址信息的容器
 5             IPHostEntry local = Dns.GetHostEntry(HostName);
 6 
 7             //通過IPHostEntry對象的AddressList屬性獲取相關聯主機的所有IP地址
 8             IPAddress[] ipList = local.AddressList;
 9 
10             //獲取本機回環地址
11             IPAddress loopbackIP = IPAddress.Loopback;
12 
13             //通過它Parse函數構造IPAddress對象
14             IPAddress localIp = IPAddress.Parse("192.168.1.101");
15 
16             //通過IPAddress對象和端口號構造IPEndPoint對象
17             IPEndPoint iep = new IPEndPoint(localIp, 80);

   查看運行示例程序效果:

  

 

2.獲取網卡信息和網絡檢測

  網絡適配器又被稱為網卡或者網絡接口卡(NIC),是連接計算機和網絡的硬件設備。網卡主要的工作原理是:整理計算機發往信道上的數據,並將數據分解為適當大小的數據包之后向網絡上發送。在.NET開發中我們使用System.Net.NetworkInformation命名空間獲取:網絡流量數據、網絡地址信息和本地計算機的地址更改通知等信息。 該命名空間還包含實現 Ping 實用工具的類。 可以使用 Ping 和相關的類檢查是否可通過網絡連接到計算機。

2.1 獲取網卡信息

  獲取網卡信息、網絡連接和網絡速度以及網絡協議版本(包括:IPv4和IPv6)的網絡接口信息,我們使用下面的兩個類:

  1. NetworkInterface類:提供了訪問主機所有接口的信息的功能。利用該類我們可以方便的檢測本機有多少個網卡、哪些網絡連接可用、並獲取某個網卡的型號、Mac地址和速度等信息。
  2. IPInterfaceProperties類:可用於訪問支持 IPv4 或 IPv6 的網絡接口的配置和地址信息。該類是一個抽象類,不能直接創建,使用NetworkInterface.GetIPProperties()返回實例。

  下面我們通過一個簡單的Windows Forms示例程序來學習如何獲取網絡接口的配置和統計信息,主要代碼如下:

1             //獲取主機上所有的網絡適配器對象數組
2             NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces();
3 
4             //獲取該網絡適配器的配置對象
5             IPInterfaceProperties adapterProperties = adapters[i].GetIPProperties();
6 
7             //獲取並該網絡適配器DNS服務器地址信息
8             IPAddressCollection dnsServers = adapterProperties.DnsAddresses;

   運行實例程序效果:

  

2.2 網絡流量檢測

  我們可以使用System.Net.NetworkInformation命名空間的IPGlobalProperties類獲取網絡適配器接收、轉發、丟棄、發送的數據包數目,該類提供有關本地計算機的網絡連接的信息。檢測網絡流量是我們通過使用IPGlobalProperties類的GetIPGlobalProperties()方法獲取記錄本地計算機的網絡連接和通信統計數據的信息的對象實例,通過實例的屬性來獲取相關信息,達到檢測網絡流量的目的:

1             //獲取包含本機的網絡連接和通信統計數據的信息的對象
2             IPGlobalProperties properties = IPGlobalProperties.GetIPGlobalProperties();
3 
4             //獲取本機IPv4統計數據
5             IPGlobalStatistics ipstate = properties.GetIPv4GlobalStatistics();

   下面我們還是通過上面的代碼來創建一個小例子來學習如何檢測網絡流量,程序運行效果如下:

  

2.3 網絡連接檢測

  我們知道可以利用CMD命令行中輸入的ping命令,通過調用ping.exe命令行程序來檢測網絡連接,能夠快速判斷出網絡故障。在.NET開發環境中我們可以通過使用System.Net.NetworkInformation命名空間下的Ping類、PingOptions類和PingReply類來實現類似於ping.exe命令行的功能。

  • Ping類可以確定應用程序確定是否可通過網絡訪問遠程計算機
  • PingOptions用於控制如何傳輸 Ping 數據包
  • PingReply提供有關 Send 或 SendAsync 操作的狀態及產生的數據的信息。

示例程序主要代碼如下:

 1             //獲取主機地址
 2             string hostAddress = this.txt_HostAddress.Text.Trim();
 3             //構造Ping實例
 4             Ping pingSender = new Ping();
 5             //Ping選項設置
 6             PingOptions options = new PingOptions();
 7             options.DontFragment = true;
 8             //測試數據
 9             string testData = "Test Data";
10             byte[] buffer = Encoding.ASCII.GetBytes(testData);
11             //設置超時時間
12             int timeout = 120;
13             //調用同步的Send方法發送數據,將結果保存至PingReply實例
14             PingReply reply = pingSender.Send(hostAddress, timeout, buffer, options);     

  示例程序運行效果:

  

 

示例下載:猛擊下載

參考資料:

MSDN .NET Framework 4 類庫

 《C#網絡應用編程2》

作者:晴天豬

出處:http://www.cnblogs.com/IPrograming 

本文版權歸作者和博客園共有,歡迎轉載,並請注明出處。


免責聲明!

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



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