明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

使用C#調(diào)用外部Ping命令取得網(wǎng)絡(luò)連接情況

[摘要]以前在玩Windows 98的時(shí)候,幾臺(tái)電腦連起來(lái),需要測(cè)試網(wǎng)絡(luò)連接是否正常,經(jīng)常用的一個(gè)命令就是Ping.exe。感覺(jué)相當(dāng)實(shí)用。 現(xiàn)在 .net為我們提供了強(qiáng)大的功能來(lái)調(diào)用外部工具,并通過(guò)重定向輸入、輸出獲取執(zhí)行結(jié)果,下面就用一個(gè)例子來(lái)說(shuō)明調(diào)用Ping.exe命令實(shí)現(xiàn)網(wǎng)絡(luò)的檢測(cè),希望對(duì).net初...
以前在玩Windows 98的時(shí)候,幾臺(tái)電腦連起來(lái),需要測(cè)試網(wǎng)絡(luò)連接是否正常,經(jīng)常用的一個(gè)命令就是Ping.exe。感覺(jué)相當(dāng)實(shí)用。

現(xiàn)在 .net為我們提供了強(qiáng)大的功能來(lái)調(diào)用外部工具,并通過(guò)重定向輸入、輸出獲取執(zhí)行結(jié)果,下面就用一個(gè)例子來(lái)說(shuō)明調(diào)用Ping.exe命令實(shí)現(xiàn)網(wǎng)絡(luò)的檢測(cè),希望對(duì).net初學(xué)者有所幫助。

首先,我們用使用Process類(lèi),來(lái)創(chuàng)建獨(dú)立的進(jìn)程,導(dǎo)入System.Diagnostics,

using System.Diagnostics;

實(shí)例一個(gè)Process類(lèi),啟動(dòng)一個(gè)獨(dú)立進(jìn)程

Process p = new Process();

Process類(lèi)有一個(gè)StartInfo屬性,這個(gè)是ProcessStartInfo類(lèi),包括了一些屬性和方法,

下面我們用到了他的幾個(gè)屬性:

設(shè)定程序名

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

關(guān)閉Shell的使用

p.StartInfo.UseShellExecute = false;

重定向標(biāo)準(zhǔn)輸入

p.StartInfo.RedirectStandardInput = true;

重定向標(biāo)準(zhǔn)輸出

p.StartInfo.RedirectStandardOutput = true;

重定向錯(cuò)誤輸出

p.StartInfo.RedirectStandardError = true;

設(shè)置不顯示窗口

p.StartInfo.CreateNoWindow = true;

上面幾個(gè)屬性的設(shè)置是比較關(guān)鍵的一步。

既然都設(shè)置好了那就啟動(dòng)進(jìn)程吧,

p.Start();

輸入要執(zhí)行的命令,這里就是ping了,

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

p.StandardInput.WriteLine("exit");

從輸出流獲取命令執(zhí)行結(jié)果,

string strRst = p.StandardOutput.ReadToEnd();

在本機(jī)測(cè)試得到如下結(jié)果:

"Microsoft Windows 2000 [Version 5.00.2195]\r\n(C) 版權(quán)所有 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"

有了輸出結(jié)果,那還有什么好說(shuō)的,分析strRst字符串就可以知道網(wǎng)絡(luò)的連接情況了。

下面是一個(gè)完整的程序,當(dāng)然對(duì)Ping.exe程序執(zhí)行的結(jié)果不全,讀者可以進(jìn)一步修改

完整代碼如下:

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 = "無(wú)法到達(dá)目的主機(jī)";

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

                   pingrst = "超時(shí)";

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

                   pingrst = "無(wú)法解析主機(jī)";

              else

                   pingrst = strRst;

              p.Close();

              return pingrst;

         }

     }

}




     總結(jié),這里就是為了說(shuō)明一個(gè)問(wèn)題,不但是Ping命令,只要是命令行程序或者是Dos內(nèi)部命令,我們都可以用上面的方式來(lái)執(zhí)行它,并獲取相應(yīng)的結(jié)果,并且這些程序的執(zhí)行過(guò)程不會(huì)顯示出來(lái),如果需要調(diào)用外部程序就可以嵌入到其中使用了。