通過前面的筆記我們可以知道:一個用戶端想要發起一次通訊,先決條件就是需要知道運行著伺服器端程式的主機的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)的網路介面資訊,我們使用下面的兩個類:
- NetworkInterface類:提供了訪問主機所有介面的資訊的功能。利用該類我們可以方便的檢測本機有多少個網卡、哪些網路連接可用、並擷取某個網卡的型號、Mac地址和速度等資訊。
- 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
本文著作權歸作者和部落格園共有,歡迎轉載,並請註明出處。