C网络连接判断

上传人:cl****1 文档编号:456355205 上传时间:2023-02-13 格式:DOC 页数:7 大小:56KB
返回 下载 相关 举报
C网络连接判断_第1页
第1页 / 共7页
C网络连接判断_第2页
第2页 / 共7页
C网络连接判断_第3页
第3页 / 共7页
C网络连接判断_第4页
第4页 / 共7页
C网络连接判断_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《C网络连接判断》由会员分享,可在线阅读,更多相关《C网络连接判断(7页珍藏版)》请在金锄头文库上搜索。

1、最简便并且测试性能最正确方法以前在玩 Windows 98的时候,几台电脑连起来,需要测试网络连接是否正常,经常用的一个命令就是Ping.exe 。感觉相当实用。现在.net为我们提供了强大的功能来调用外部工具,并通过重定向输入、输出获取执行结果,下面就用一个例子来说明调用Ping.exe命令实现网络的测,希望对 .net初学者有所帮助。首先,我们用使用Process类,来创立独立的进程,导入 System.Diagnostics ,using System.Diagnostics;实例一个Process类,启动一个独立进程Process p = new Process。;Process类有一

2、个 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.S

3、tartInfo.CreateNoWindow = true;/上面几个属性的设置是比拟关键的一步。/既然都设置好了那就启动进程吧,p.Start();输入要执行的命令,这里就是 ping 了,p.StandardInput.WriteLine(ping -n 1 192.192.132.229);p.StandardInput.WriteLine(exit);从输出流获取命令执行结果,string strRst = p.StandardOutput.ReadToEnd();版权所有 1985-2000 Microsoft在本机测试得到如下结果:Microsoft Windows 2000 V

4、ersion 5.00.2195/r/n(C)Corp./r/n/r/nD:himurazcsharpproject/ZZConsoleTest/binDebugping -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 timeexit/r/n有了输出结果,那还有什么好说的,分析 strRst字符串就可以知道网络的连接情况了。下面是一个完整的程序,当然对 Ping.exe程序执行的结果不全,读者

5、可以进一步修改, 完整代码如下:view plaincopy to clipboardprint?1. using System;2. using System.Diagnostics;3. namespace ZZ4. 5. class ZZConsole6. 7. STAThread8. static void Main(string口 args)9. 10. string ip = 192.192.132.229;11. string strRst = CmdPing(ip);12. Console.WriteLine(strRst);13. Console.ReadLine();14.

6、 15. private static string CmdPing(string strip)16. 17. Process p = new Process();18. p.StartInfo.FileName = cmd.exe;19. p.StartInfo.UseShellExecute = false;20. p.StartInfo.RedirectStandardInput = true;21. p.Startlnfo.RedirectStandardOutput = true;22. p.StartInfo.RedirectStandardError = true;23. p.S

7、tartInfo.CreateNoWindow = true;24. string pingrst;25. p.Start();26. p.StandardInput.WriteLine(ping -n 1 +strIp);27. p.StandardInput.WriteLine(exit);28. string strRst = p.StandardOutput.ReadToEnd();29. if(strRst.IndexOf(0% loss)!=-1)30. pingrst=连接;31. else if( strRst.IndexOf(Destination host unreacha

8、ble.)!=-1)32. pingrst=无法到达目的主机;33. else if(strRst.IndexOf(Request timed out.)!=-1)34. pingrst=超时;35. else if(strRst.IndexOf(Unknown host)!=-1)36. pingrst=无法解析主机;37. else38. pingrst= strRst;39. p.Close();40. return pingrst;41. 42. 43. 总结,这里就是为了说明一个问题,不但是 Ping命令,只要是命令行程序或者是Dos内部命令,我们都可以用上面的方式来执行它,并获取相

9、应的结果,并且这些程序的执行过程不会显示出来,如果需要调用外部程序就可以嵌入到其中使用了。其余方法:方法1下面这个程序就是,你可以直接去建立一个控制台应用程序去调试一下不过需要说明一下,程序的思路就是,通过PING的方式去ping internet上计算 机的IP地址(这里是随便用的一个网通效劳器 IP123.145.68.1 ),如果能ping 成功代表,本地电脑连接上外网。123.145.68.1这个IP地址可以随意换只要是在internet上的计算机的IP都可以, 不过如果你程序的这个IP不是通过配置,而是写死在程序中的情况,推荐你使 用一个一直都在线的计算机IP,比方QQ, 163等效

10、劳器IP (你应该明白吧)那个IP也可以换成如 :/ 163 的字符串,不过这时候需要对PingReplypr = p.Send( :/ 163 );这句代码进行 try catch 一下(因 为,断开网络的时候会抛出异常);暂停10分钟的那段代码要写在catch里,这里就不详细列出了。你肯定知道的。using System;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Net.NetworkInformation;usingSystem.Threading;namespace ConsoleApplication1

11、class Programstatic void Main(string口 args) Ping p = new Ping();/ 创立 Ping 对象 pPingReplypr = p.Send(123.145.68.1);/ 向指定IP或者主机名的计算机发送 ICMP协议的ping数据包if (pr.Status = IPStatus.Success)/ 如果 ping 成功 Console.WriteLine(网络连接成功,执行下面任务) elseint times = 0;/重新连接次数; doif (times = 12)Console.WriteLine(重新尝试连接超过12次,连

12、接失败程序结束); return;Thread.Sleep(600000);/等待十分钟(方便测试的话,你可以改为 1000) pr = p.Send(123.145.68.1);Console.WriteLine(pr.Status);times+;while (pr.Status != IPStatus.Success);Console.WriteLine(连接成功);times = 0;/连接成功,重新连接次数消为0;方法2判断网络是否连接要使用Windows API 发个例子给你.这个是DotNet平台的P/Invoke调用.仿造这个,在你程序里弄个新线程,10分钟执行一次,12次退出

13、,很容易的.privateconstint INTERNET_CONNECTION_MODEM =1;privateconstint INTERNET_CONNECTION_LAN =2;DllImport(winInet.dll)private static extern boolInternetGetConnectedState(refintdwFlag, intdwReserved );/调用的方法(Winform为例,放一个按钮,单击即可):private void button1_Click(object sender, System.EventArgs e)System.Int32

14、 dwFlag = new int();if(!InternetGetConnectedState(ref dwFlag, 0)MessageBox.Show(未连网!); elseif(dwFlag& INTERNET_CONNECTION_MODEM)!=0)MessageBox.Show(采用调治解调器上网。); elseif(dwFlag& INTERNET_CONNECTION_LAN)!=0)MessageBox.Show(采用网卡上网。);楼上的方案属于非完全性方案,判断发包是否成功.这样永远都会有Bug的.方法3usingSystem.Runtime.InteropServices;privateconst long INTERNET_CONNECTION_MODEM = 1;/Loca

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号