通過前面的筆記我們可以知道:乙個客戶端想要發起一次通訊,先決條件就是需要知道執行著伺服器端程式的主機的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位址和速度等資訊。下面我們通過乙個簡單的windows forms示例程式來學習如何獲取網路介面的配置和統計資訊,主要**如下:ipinte***ceproperties類:可用於訪問支援 ipv4 或 ipv6 的網路介面的配置和位址資訊。該類是乙個抽象類,不能直接建立,使用networkinte***ce.getipproperties()返回例項。
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 載入套接...