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

2021-06-16 09:03:39 字數 4003 閱讀 7425

通過前面的筆記

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

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

1

//獲取本地主機名

2string localhostname =dns.gethostname();34

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

5 iphostentry local =dns.gethostentry(hostname);67

//8 ipaddress iplist =local.addresslist;910

//獲取本機回環位址

11 ipaddress loopbackip =ipaddress.loopback;

1213

//通過它parse函式構造ipaddress物件

14 ipaddress localip = ipaddress.parse("

192.168.1.101");

1516

//通過ipaddress物件和埠號構造ipendpoint物件

17 ipendpoint iep = new ipendpoint(localip, 80);

檢視執行示例程式效果:

網路介面卡又被稱為網絡卡或者網路介面卡(nic),是連線計算機和網路的硬體裝置。網絡卡主要的工作原理是:整理計算機發往通道上的資料,並將資料分解為適當大小的資料報之後向網路上傳送。在.net開發中我們使用system.net.networkinformation

該命名空間還包含實現 ping 實用工具的類。

可以使用 ping 和相關的類檢查是否可通過網路連線到計算機。

2.1 獲取網絡卡資訊

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

networkinte***ce

ipinte***ceproperties

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

返回例項。

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

1

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

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

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

5 ipinte***ceproperties adapterproperties =adapters[i].getipproperties();67

//獲取並該網路介面卡dns伺服器位址資訊

8 ipaddresscollection dnsservers = adapterproperties.dnsaddresses;

執行例項程式效果:

2.2 網路流量檢測

我們可以使用system.net.networkinformation命名空間的ipglobalproperties

類獲取網路介面卡接收、**、丟棄、傳送的資料報數目,該類提供有關本地計算機的網路連線的資訊。檢測網路流量是我們通過使用ipglobalproperties類的getipglobalproperties()

1

//獲取包含本機的網路連線和通訊統計資料的資訊的物件

2 ipglobalproperties properties =ipglobalproperties.getipglobalproperties();34

//獲取本機ipv4統計資料

5 ipglobalstatistics ipstate = properties.getipv4globalstatistics();

下面我們還是通過上面的**來建立乙個小例子來學習如何檢測網路流量,程式執行效果如下:

2.3 網路連線檢測

我們知道可以利用cmd命令列中輸入的ping命令,通過呼叫ping.exe命令列程式來檢測網路連線,能夠快速判斷出網路故障。在.net開發環境中我們可以通過使用system.net.networkinformation命名空間下的ping

類、pingoptions類和pingreply類來實現類似於ping.exe命令列的功能。

示例程式主要**如下:

1

//獲取主機位址

2string 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

//測試資料

9string testdata = "

test data";

10byte buffer =encoding.ascii.getbytes(testdata);

11//

設定超時時間

12int timeout = 120;13

//呼叫同步的send方法傳送資料,將結果儲存至pingreply例項

14 pingreply reply = pingsender.send(hostaddress, timeout, buffer, options);

示例程式執行效果:

msdn .net framework 4 類庫

《c#網路應用程式設計2》

晴天豬出處:

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 載入套接...