• 注册
  • 关于作者
    企业认证:趣记站长
    关注 6 粉丝 4 喜欢 9 内容 992
    江西省·南昌市
    聊天 送礼
    • 查看作者
    • 使用C#调用外部Ping命令获取网络连接情况

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

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

      首先,我们用使用Process类,来创建独立的进程,导入System.Diagnostics,

      using System.Diagnostics;

      实例一个Process类,启动一个独立进程

      Process p = new Process();

      Process类有一个StartInfo属性,这个是ProcessStartInfo类,包括了一些属性和方法,

      C#中在应用程序和DLL使用消息
      用C#实现全屏幕截图,.Net网站独立配置文件读写方案,SmartSoft中用C#.Net实现AutoCAD块属性提取,.NET组件和COM组件之间的相互操作,.net中前台javascript与后台c#相互调用,正确理解C#中的ref关键字,Visual C#2005中使用正则表达式,实例:用Visual C#制作新闻阅读器,病毒及流氓软件自我复制的简单实现(C#),在.NET中使用域对象持续模式,汇总c#.net常用函数和方法集,C#开发的两个原则的深入讨论,c#.net常用函数列表,在C#程序设计中使用Win32类库,用C#轻松在DOTNET中实现缩略图,使用C#编写的一个定时关机程序,深入理解C#编程中的组件-事件-委托,通过Visual C#.NET建一个DTS任务,用C#的Raw Socket实现网络封包监视,利用C#实现标准的 Dispose模式
      Visual C#

      下面我们用到了他的几个属性:

      设定程序名

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

      使用C#控制远程计算机的服务
      用C#实现全屏幕截图,.Net网站独立配置文件读写方案,SmartSoft中用C#.Net实现AutoCAD块属性提取,.NET组件和COM组件之间的相互操作,.net中前台javascript与后台c#相互调用,正确理解C#中的ref关键字,Visual C#2005中使用正则表达式,实例:用Visual C#制作新闻阅读器,病毒及流氓软件自我复制的简单实现(C#),在.NET中使用域对象持续模式,汇总c#.net常用函数和方法集,C#开发的两个原则的深入讨论,c#.net常用函数列表,在C#程序设计中使用Win32类库,用C#轻松在DOTNET中实现缩略图,使用C#编写的一个定时关机程序,深入理解C#编程中的组件-事件-委托,通过Visual C#.NET建一个DTS任务,用C#的Raw Socket实现网络封包监视,利用C#实现标准的 Dispose模式
      Visual C#

    • 0
    • 0
    • 0
    • 56
    • 单栏布局 侧栏位置: