使用C#調用外部Ping命令獲取網絡連接情況

使用C#調用外部Ping命令獲取網絡連接情況

以前在玩Windows 98的時候,幾臺電腦連起來,需要測試網絡連接是否正常,經常用的一個命令就是Ping.exe。感覺相當實用。

現在 .net為我們提供了強大的功能來調用外部工具,并通過重定向輸入、輸出獲取執行結果,下面就用一個例子來說明調用Ping.exe命令實現網絡的檢測,希望對.net初學者有所幫助。

首先,我們用使用Process類,來創建獨立的進程,導入System.Diagnostics

using System.Diagnostics;

實例一個Process類,啟動一個獨立進程

Process p = new Process();

Process類有一個StartInfo屬性,這個是ProcessStartInfo類,包括了一些屬性和方法,

下面我們用到了他的幾個屬性:

設定程序名

p.StartInfo.FileName = "cmd.exe";

關閉Shell的使用

p.StartInfo.UseShellExecute = false;

重定向標準輸入

p.StartInfo.RedirectStandardInput = true;

重定向標準輸出

p.StartInfo.RedirectStandardOutput = true;

重定向錯誤輸出

p.StartInfo.RedirectStandardError = true;

設置不顯示窗口

p.StartInfo.CreateNoWindow = true;

上面幾個屬性的設置是比較關鍵的一步。

既然都設置好了那就啟動進程吧,

p.Start();

輸入要執行的命令,這里就是ping了,

p.StandardInput.WriteLine("ping -n 1 192.192.132.229");

p.StandardInput.WriteLine("exit");

從輸出流獲取命令執行結果,

string strRst = p.StandardOutput.ReadToEnd();

在本機測試得到如下結果:

"Microsoft Windows 2000 [Version 5.00.2195]/r/n(C) 版權所有 1985-2000 Microsoft Corp./r/n/r/nD://himuraz//csharpproject//ZZ//ConsoleTest//bin//Debug>ping -n 1 192.192.132.231/r/n/r/r/nPinging 192.192.132.231 with 32 bytes of data:/r/r/n/r/r/nReply from 192.192.132.231: bytes=32 time<10ms TTL=128/r/r/n/r/r/nPing statistics for 192.192.132.231:/r/r/n??? Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),/r/r/nApproximate round trip times in milli-seconds:/r/r/n??? Minimum = 0ms, Maximum =?0ms, Average =?0ms/r/r/n/r/nD://himuraz//csharpproject//ZZ//ConsoleTest//bin//Debug>exit/r/n"

有了輸出結果,那還有什么好說的,分析strRst字符串就可以知道網絡的連接情況了。

下面是一個完整的程序,當然對Ping.exe程序執行的結果不全,讀者可以進一步修改

完整代碼如下:

using System;

using System.Diagnostics;

namespace ZZ

{

???? class ZZConsole

???? {

???????? [STAThread]

???????? static void Main(string[] args)

???????? {???

????????????? string ip = "192.192.132.229";

????????????? string strRst = CmdPing(ip);

????????????? Console.WriteLine(strRst);

????????????? Console.ReadLine();

???????? }

???????? private static string CmdPing(string strIp)

???????? {

????????????? Process p = new Process();

????????????? p.StartInfo.FileName = "cmd.exe";

????????????? p.StartInfo.UseShellExecute = false;

????????????? p.StartInfo.RedirectStandardInput = true;

????????????? p.StartInfo.RedirectStandardOutput = true;

????????????? p.StartInfo.RedirectStandardError = true;

????????????? p.StartInfo.CreateNoWindow = true;

????????????? string pingrst;

????????????? p.Start();

????????????? p.StandardInput.WriteLine("ping -n 1 "+strIp);

????????????? p.StandardInput.WriteLine("exit");

????????????? string strRst = p.StandardOutput.ReadToEnd();

????????????? if(strRst.IndexOf("(0% loss)")!=-1)

?????????????????? pingrst = "連接";

????????????? else if( strRst.IndexOf("Destination host unreachable.")!=-1)

?????????????????? pingrst = "無法到達目的主機";

????????????? else if(strRst.IndexOf("Request timed out.")!=-1)

?????????????????? pingrst = "超時";

????????????? else if(strRst.IndexOf("Unknown host")!=-1)

?????????????????? pingrst = "無法解析主機";

????????????? else

?????????????????? pingrst = strRst;

????????????? p.Close();

????????????? return pingrst;

???????? }

???? }

}

?

???? 總結,這里就是為了說明一個問題,不但是Ping命令,只要是命令行程序或者是Dos內部命令,我們都可以用上面的方式來執行它,并獲取相應的結果,并且這些程序的執行過程不會顯示出來,如果需要調用外部程序就可以嵌入到其中使用了。
?

?作者:鄭佐 2004-03-20

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/389193.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/389193.shtml
英文地址,請注明出處:http://en.pswp.cn/news/389193.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Codeforces Round 493

心情不好&#xff0c;被遣散回學校 &#xff0c;心態不好 &#xff0c;為什么會累&#xff0c;一直微笑就好了 #include<bits/stdc.h> using namespace std; int main() {freopen("in","r",stdin);\freopen("out","w",stdout);i…

android動畫筆記二

從android3.0&#xff0c;系統提供了一個新的動畫&#xff0d;property animation, 為什么系統會提供這樣一個全新的動畫包呢&#xff0c;先來看看之前的補間動畫都有什么缺陷吧1、傳統的補間動畫都是固定的編碼&#xff0c;功能是固定的&#xff0c;擴展難度大。比如傳統動畫只…

回歸分析檢驗_回歸分析

回歸分析檢驗Regression analysis is a reliable method in statistics to determine whether a certain variable is influenced by certain other(s). The great thing about regression is also that there could be multiple variables influencing the variable of intere…

是什么樣的騷操作讓應用上線節省90%的時間

優秀的程序員 總會想著 如何把花30分鐘才能解決的問題 在5分鐘內就解決完 例如在應用上線這件事上 通常的做法是 構建項目在本地用maven打包 每次需要clean一次&#xff0c;再build一次 部署包在本地ide、git/svn、maven/gradie 及代碼倉庫、鏡像倉庫和云平臺間 來回切換 上傳部…

QQ API

QQ API設計說明書目錄一、引言 31.1 編寫目的 31.2 更新時間 3二、總體設計 3三、注冊的系統消息 33.1 WM_QQAPI_REGISTER 33.2 WM_QQAPI_REGISTER_RESP 43.3 WM_QQAPI_AVAILABLE 4四、從設備到QQ的自定義事件 54.1 EVENT_QQAPI_SET_AUDIODEVICE …

Ubuntu 18.04 下如何配置mysql 及 配置遠程連接

首先是大家都知道的老三套&#xff0c;啥也不說上來就放三個大招&#xff1a; sudo apt-get install mysql-serversudo apt isntall mysql-clientsudo apt install libmysqlclient-dev 這三步下來mysql就裝好了&#xff0c;然后我們偷偷檢查一下 sudo netstat -tap | grep mysq…

數據科學與大數據技術的案例_主數據科學案例研究,招聘經理的觀點

數據科學與大數據技術的案例I’ve been in that situation where I got a bunch of data science case studies from different companies and I had to figure out what the problem was, what to do to solve it and what to focus on. Conversely, I’ve also designed case…

導致View樹遍歷的時機

遍歷View樹意味著整個View需要重新對其包含的子視圖分配大小并重繪&#xff0c;導致重新遍歷的原因主要有三個 1.視圖本身內部狀況變化引起重繪。 2.第二個是View樹內部添加或者刪除了View。 3.View本身的大小及可見性發生變化。 能引起View樹重新遍歷的操作&#xff0c;總…

什么是Hyperledger?Linux如何圍繞英特爾的區塊鏈項目構建開放平臺?

訪問區塊鏈會議并關注區塊鏈新聞時&#xff0c;不可避免地&#xff0c;您會遇到Linux基金會的Hyperledger。理解像比特幣、以太坊這樣的加密貨幣還算相對容易的&#xff0c;Hyperledger卻不然。但如果你多研究研究&#xff0c;你會發現一些令人興奮的非貨幣、工業區塊鏈的應用項…

隊列的鏈式存儲結構及其實現_了解隊列數據結構及其實現

隊列的鏈式存儲結構及其實現A queue is a collection of items whereby its operations work in a FIFO — First In First Out manner. The two primary operations associated with them are enqueue and dequeue.隊列是項目的集合&#xff0c;由此其操作以FIFO(先進先出)的方…

安裝

、添加一個新項目->選擇類庫模板->命名為DBCustomAction 2、單擊項目右鍵->添加新項->選擇安裝程序類(命名為DBCustomAction.cs) 3、在 服務器資源管理器中添加->連接到 數據庫->指定用戶密碼(選擇允許保存密碼)-> 數據庫選擇master 4、切換到DBCustomAct…

cad2016珊瑚_預測有馬的硬珊瑚覆蓋率

cad2016珊瑚What’s the future of the world’s coral reefs?世界珊瑚礁的未來是什么&#xff1f; In February of 2020, scientists at University of Hawaii Manoa released a study addressing this very question. The models they developed forecasted a 70–90% worl…

EChart中使用地圖方式總結(轉載)

EChart中使用地圖方式總結 2018年02月06日 22:18:57 來源&#xff1a;https://blog.csdn.net/shaxiaozilove/article/details/79274772最近在仿照EChart公交線路方向示例&#xff0c;開發表示排水網和污水網流向地圖&#xff0c;同時地圖上需要疊加排放口、污染源、污水處理廠等…

android mvp模式

越來越多人討論mvp模式&#xff0c;mvp在android應用開發中獲得更多的重視&#xff0c;這里說一下對MVP的簡單了解。 什么是 MVP? MVP模式使邏輯從視圖層分開&#xff0c;目的是我們在屏幕上怎么表現&#xff0c;和界面如何工作的所有事情就完全分開了。 View顯示數據&…

Node.js REPL(交互式解釋器)

2019獨角獸企業重金招聘Python工程師標準>>> Node.js REPL(交互式解釋器) Node.js REPL(Read Eval Print Loop:交互式解釋器) 表示一個電腦的環境&#xff0c;類似 Window 系統的終端或 Unix/Linux shell&#xff0c;我們可以在終端中輸入命令&#xff0c;并接收系統…

中國移動短信網關CMPP3.0 C#源代碼:使用示例

中國移動短信網關CMPP3.0 C#源代碼&#xff1a;使用示例 中國移動短信網關CMPP3.0 C#源代碼使用&#xff0c;在上一篇文章中我介紹過cmpp3.0,這段時間因為也做關于移動短信網關的開發&#xff0c;在這里給大家一個演示如何使用cmpp3.0開發移動短信網關。Using Tiray.SMS... Ti…

用python進行營銷分析_用python進行covid 19分析

用python進行營銷分析Python is a highly powerful general purpose programming language which can be easily learned and provides data scientists a wide variety of tools and packages. Amid this pandemic period, I decided to do an analysis on this novel coronav…

名稱

命名規則&#xff1a;Go中函數、變量、常量、類型、語句標簽和包的名稱都遵循一個規則&#xff0c;開頭是一個字母或下劃線&#xff0c;后面跟任意字符、數字和下劃線&#xff0c;并區分大小寫。例如&#xff1a;heapSort和HeapSort是不同名稱。關鍵字&#xff1a;Go有25個關鍵…

Alpha沖刺第二天

Alpha第二天 1.團隊成員 鄭西坤 031602542 &#xff08;隊長&#xff09; 陳俊杰 031602504陳順興 031602505張勝男 031602540廖鈺萍 031602323雷光游 031602319蘇芳锃 0316023302.項目燃盡圖 3.項目進展 時間工作內容11月18日UI設計、初步架構搭建11月19日UI設計、服務器的進一…

Tiray.SMSTiray.SMSTiray.SMSTiray.SMSTiray.SMSTiray.SMS

這是2005年6月云南移動短信網關升級到3.0時寫的&#xff0c;在SP那穩定運行了很長時間的。因為SP倒閉了&#xff0c;貼出來給有興趣的朋友參考。優點&#xff1a;支持多線程、滑動窗口、異步發送、全事件模式、自動識別ASCII、GBK、UCS-2缺點&#xff1a;不支持長短信自動分頁、…