c#

位置:IT落伍者 >> c# >> 浏览文章

C#调外部Ping命令获取网络连接情况


发布日期:2019年12月12日
 
C#调外部Ping命令获取网络连接情况

以前在玩Windows 的时候几台电脑连起来需要测试网络连接是否正常经常用的一个命令就是Pingexe感觉相当实用

现在为我们提供了强大的功能来调用外部工具并通过重定向输入输出获取执行结果下面就用一个例子来说明调用Pingexe命令实现网络的检测希望初学者有所帮助

首先我们用使用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\nD

\\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\nD

\\himuraz\\csharpproject\\ZZ\\ConsoleTest\\bin\\Debug>exit\r\n

有了输出结果那还有什么好说的分析strRst字符串就可以知道网络的连接情况了

下面是一个完整的程序当然对Pingexe程序执行的结果不全读者可以进一步修改

完整代码如下

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内部命令我们都可以用上面的方式来执行它并获取相应的结果并且这些程序的执行过程不会显示出来如果需要调用外部程序就可以嵌入到其中使用了

               

上一篇:.net中申请单动态添加实现方法及代码

下一篇:实例讲解.NET多线程执行函数