熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

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

2013-11-13 10:12:53  來源: .NET編程 

  以前在玩Windows 的時候幾台電腦連起來需要測試網絡連接是否正常經常用的一個命令就是Pingexe感覺相當實用
 
  現在為我們提供了強大的功能來調用外部工具並通過重定向輸入輸出獲取執行結果下面就用一個例子來說明調用Pingexe命令實現網絡的檢測希望對net初學者有所幫助
 
  首先我們用使用Process類來創建獨立的進程導入SystemDiagnostics
 
  using SystemDiagnostics
 
  實例一個Process類啟動一個獨立進程
 
  Process p = new Process()
 
  Process類有一個StartInfo屬性這個是ProcessStartInfo類包括了一些屬性和方法
 
  下面我們用到了他的幾個屬性
 
  設定程序名
 
  pStartInfoFileName = cmdexe
 
  關閉Shell的使用
 
  pStartInfoUseShellExecute = false
 
  重定向標准輸入
 
  pStartInfoRedirectStandardInput = true
 
  重定向標准輸出
 
  pStartInfoRedirectStandardOutput = true
 
  重定向錯誤輸出
 
  pStartInfoRedirectStandardError = true
 
  設置不顯示窗口
 
  pStartInfoCreateNoWindow = true
 
  上面幾個屬性的設置是比較關鍵的一步
 
  既然都設置好了那就啟動進程吧
 
  pStart()
 
  輸入要執行的命令這裡就是ping了
 
  pStandardInputWriteLine(ping n
 
  pStandardInputWriteLine(exit
 
  從輸出流獲取命令執行結果
 
  string strRst = pStandardOutputReadToEnd()
 
  在本機測試得到如下結果
 
  Microsoft Windows [Version ]\r\n(C) 版權所有 Microsoft Corp\r\n\r\nDping>\\himuraz\\csharpproject\\ZZ\\ConsoleTest\\bin\\Debug>ping n \r\n\r\r\nPinging with bytes of data\r\r\n\r\r\nReply from bytes= time<ms TTL=\r\r\n\r\r\nPing statistics for \r\r\n Packets Sent = Received = Lost = % loss)\r\r\nApproximate round trip times in milliseconds\r\r\n Minimum = ms Maximum = ms Average = ms\r\r\n\r\nDexit\r\n>\\himuraz\\csharpproject\\ZZ\\ConsoleTest\\bin\\Debug>exit\r\n

  有了輸出結果那還有什麼好說的分析strRst字符串就可以知道網絡的連接情況了
 
  下面是一個完整的程序當然對Pingexe程序執行的結果不全讀者可以進一步修改
 
  完整代碼如下
 
   cellPadding= width=% align=center bgColor=#ffffff border= heihgt=>  using System;
using SystemDiagnostics;
namespace ZZ
{
class ZZConsole
{
[STAThread]
static void Main(string[] args)
{
string ip = ;
string strRst = CmdPing(ip);
ConsoleWriteLine(strRst);
ConsoleReadLine();
}
private static string CmdPing(string strIp)
{
Process p = new Process();
pStartInfoFileName = cmdexe;
pStartInfoUseShellExecute = false;
pStartInfoRedirectStandardInput = true;
pStartInfoRedirectStandardOutput = true;
pStartInfoRedirectStandardError = true;
pStartInfoCreateNoWindow = true;
string pingrst;
pStart();
pStandardInputWriteLine(ping n +strIp);
pStandardInputWriteLine(exit);
string strRst = pStandardOutputReadToEnd();
if(strRstIndexOf((% loss))!=)
pingrst = 連接;
else if( strRstIndexOf(Destination host unreachable)!=)
pingrst = 無法到達目的主機;
else if(strRstIndexOf(Request timed out)!=)
pingrst = 超時;
else if(strRstIndexOf(Unknown host)!=)
pingrst = 無法解析主機;
else
pingrst = strRst;
pClose();
return pingrst;
}
}
}
 
  總結這裡就是為了說明一個問題不但是Ping命令只要是命令行程序或者是Dos內部命令我們都可以用上面的方式來執行它並獲取相應的結果並且這些程序的執行過程不會顯示出來如果需要調用外部程序就可以嵌入到其中使用了
 
 


From:http://tw.wingwit.com/Article/program/net/201311/12935.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.