C Socket程式設計 2 識別網路主機

2021-09-27 07:30:54 字數 4229 閱讀 1402

通過前面的筆記我們可以知道:乙個客戶端想要發起一次通訊,先決條件就是需要知道執行著伺服器端程式的主機的ip位址是多少,埠號是多少。然後我們才能夠通過這個位址向伺服器特定的應用程式傳送資訊。對於網路上的兩台計算機來說,使用者操作的計算機稱為本地主機,與該計算機通訊的另一台計算機稱為遠端主機。識別遠端主機依靠兩部分組成:一是主機標識,用於識別與本地主機通訊的遠端主機;二是埠號,用於識別是再和遠端主機中的哪個程序通訊。

1.獲取主機位址資訊

2.獲取網絡卡資訊和網路檢測

2.1 獲取網絡卡資訊 

2.2 網路流量檢測

2.3 網路連線檢測

3.參考資料

在c#開發中system.net命名空間為網路上使用的多種協議提供了簡單的程式設計介面。我們可以利用這個命名空間下的類,編寫基於網路標準協議的應用程式時,不必去考慮各種不同協議的具體細節。在獲取主機(local和remote)位址資訊時,我們需要使用和學習這幾個最基本的類(更加詳細api可以參考msdn,下面會給出對應鏈結),用它們來實現相關的功能。

1             //獲取本地主機名

2 string localhostname = dns.gethostname();

3 4 //通過主機名獲取該主機下儲存所有ip位址資訊的容器

5 iphostentry local = dns.gethostentry(hostname);

6 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);

檢視執行示例程式效果:

網路介面卡又被稱為網絡卡或者網路介面卡(nic),是連線計算機和網路的硬體裝置。網絡卡主要的工作原理是:整理計算機發往通道上的資料,並將資料分解為適當大小的資料報之後向網路上傳送。在.net開發中我們使用system.net.networkinformation命名空間獲取:網路流量資料、網路位址資訊和本地計算機的位址更改通知等資訊。 該命名空間還包含實現 ping 實用工具的類。 可以使用 ping 和相關的類檢查是否可通過網路連線到計算機。

2.1 獲取網絡卡資訊

獲取網絡卡資訊、網路連線和網路速度以及網路協議版本(包括:ipv4和ipv6)的網路介面資訊,我們使用下面的兩個類:

networkinte***ce類:提供了訪問主機所有介面的資訊的功能。利用該類我們可以方便的檢測本機有多少個網絡卡、哪些網路連線可用、並獲取某個網絡卡的型號、mac位址和速度等資訊。

ipinte***ceproperties類:可用於訪問支援 ipv4 或 ipv6 的網路介面的配置和位址資訊。該類是乙個抽象類,不能直接建立,使用networkinte***ce.getipproperties()返回例項。

下面我們通過乙個簡單的windows forms示例程式來學習如何獲取網路介面的配置和統計資訊,主要**如下:

1             //獲取主機上所有的網路介面卡物件陣列

2 networkinte***ce adapters = networkinte***ce.getallnetworkinte***ces();

3 4 //獲取該網路介面卡的配置物件

5 ipinte***ceproperties 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命令列的功能。

示例程式主要**如下:

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);

示例程式執行效果:

C Socket程式設計 2 識別網路主機

通過前面的筆記 我們可以知道 乙個客戶端想要發起一次通訊,先決條件就是需要知道執行著伺服器端程式的主機的ip位址是多少,埠號是多少。然後我們才能夠通過這個位址向伺服器特定的應用程式傳送資訊。對於網路上的兩台計算機來說,使用者操作的計算機稱為本地主機,與該計算機通訊的另一台計算機稱為遠端主機。識別遠端...

C Socket程式設計 2 識別網路主機

通過前面的筆記 我們可以知道 乙個客戶端想要發起一次通訊,先決條件就是需要知道執行著伺服器端程式的主機的ip位址是多少,埠號是多少。然後我們才能夠通過這個位址向伺服器特定的應用程式傳送資訊。對於網路上的兩台計算機來說,使用者操作的計算機稱為本地主機,與該計算機通訊的另一台計算機稱為遠端主機。識別遠端...

C Socket 網路程式設計

過程 img 入門級的測試程式 1 客戶端 include include pragma comment lib,ws2 32.lib tcp 客戶端 void main void if lobyte wsadata.wversion 1 hibyte wsadata.wversion 1 載入套接...