博客上也写了不少文章,希望做一些组件和工具出来让大家使用。也希望大家帮忙推广,多提建议,在做技术的同时把一个技术和思想产品化其实我感觉挺好的
一直都有这个想法,而且也可以把技术惯串起来
今天利用之前的C#仿QQ皮肤 做界面,使用一些.net代码来实现Ping的功能。这个工具我会慢慢更新希望大家支持先来秀秀图片
1.项目基本结构
一共上两个项目 一个是皮肤的类库,一个是Ping功能的实现
以后我写工具的话都会以皮肤为基础,希望大家先下载使用
2.PIng界面
在这里你不但可以输入IP地址,还可以输入域名网址
查询结果,超时时间,包大小,次数大家可以自己定义
虽然是个小的工具,但是也是算是走出了第一步吧。
工具里面是源代码,大家可以直接使用Vs2010打开,使用和编辑。
在这上面我放上来一些得要的代码方便查阅吧
/// <summary> /// 类说明:PIng检查类 /// 编码日期:2011-11-17 /// 编 码 人: 苏飞 /// 联系方式:361983679 Email:[email protected] Blogs:http://sufei.cnblogs.com /// </summary> using System; using System.Collections.Generic; using System.Web; using System.Text.RegularExpressions; using System.Diagnostics; namespace Ping检查工具 { public class SpeedServices { #region codes //超时时间 private const int TIME_OUT = 100; //包大小 private const int PACKET_SIZE = 32; //Ping的次数 private const int TRY_TIMES = 1; //取时间的正则 private static Regex _reg = new Regex(@"时间=(.*?)ms", RegexOptions.Multiline | RegexOptions.IgnoreCase); Process proc_Ping = new Process(); /// <summary> /// 得到速度值单位KB /// </summary> /// <param name="strCommandline">传入的命令行</param> ///<param name="packetSize">包的大小</param> ///<returns>KB</returns> private float LaunchPing(string strCommandline, int packetSize) { SetProcess(strCommandline); proc_Ping.Start(); string strBuffer = proc_Ping.StandardOutput.ReadToEnd(); proc_Ping.Close(); return ParseResult(strBuffer, packetSize); } /// <summary> /// 设属性 /// </summary> /// <param name="strCommandline">传入的命令行</param> private void SetProcess(string strCommandline) { //命令行 proc_Ping.StartInfo.Arguments = strCommandline; //是否使用操作系统外壳来执行 proc_Ping.StartInfo.UseShellExecute = false; //是否在新窗口中启动 proc_Ping.StartInfo.CreateNoWindow = true; //exe名称默认的在System32下 proc_Ping.StartInfo.FileName = "ping.exe"; proc_Ping.StartInfo.RedirectStandardInput = true; proc_Ping.StartInfo.RedirectStandardOutput = true; proc_Ping.StartInfo.RedirectStandardError = true; } /// <summary> /// 得到Ping的结果包括统计信息 /// </summary> /// <param name="strCommandline">传入的命令行</param> ///<param name="packetSize">包的大小</param> ///<returns>KB</returns> private string LaunchPingStr(string strCommandline, int packetSize) { SetProcess(strCommandline); proc_Ping.Start(); string strBuffer = proc_Ping.StandardOutput.ReadToEnd(); proc_Ping.Close(); return strBuffer; } /// <summary> /// 取速度值 /// </summary> /// <param name="strBuffer"></param> /// <param name="packetSize"></param> /// <returns></returns> private float ParseResult(string strBuffer, int packetSize) { if (strBuffer.Length < 1) return 0.0F; MatchCollection mc = _reg.Matches(strBuffer); if (mc == null || mc.Count < 1 || mc[0].Groups == null) return 0.0F; int avg; if (!int.TryParse(mc[0].Groups[1].Value, out avg)) return 0.0F; if (avg <= 0) return 1024.0F; return (float)packetSize / avg * 1000 / 1024; } #endregion 公共方法 /// <summary> /// 得到网速 /// </summary> /// <param name="strHost">主机名或ip</param> /// <returns>kbps/s</returns> public float PingKB(string strHost) { return LaunchPing(string.Format("{0} -n {1} -l {2} -w {3}", strHost, TRY_TIMES, PACKET_SIZE, TIME_OUT), PACKET_SIZE); } /// <summary> /// 得到Ping结果字符串 /// </summary> /// <param name="strHost">主机名或ip</param> /// <param name="PacketSize">发送测试包大小</param> /// <param name="TimeOut">超时</param> /// <param name="TryTimes">测试次数</param> /// <returns>kbps/s</returns> public string GetPingStr(string strHost, int PacketSize, int TimeOut, int TryTimes) { return LaunchPingStr(string.Format("{0} -n {1} -l {2} -w {3}", strHost, TryTimes, PacketSize, TimeOut), PacketSize); } /// <summary> /// 根据传入的参数返回Ping速度结果 /// </summary> /// <param name="strHost">主机名或ip</param> /// <param name="PacketSize">发送测试包大小</param> /// <param name="TimeOut">超时</param> /// <param name="TryTimes">测试次数</param> /// <returns>kbps/s</returns> public float PingKB(string strHost, int PacketSize, int TimeOut, int TryTimes) { return LaunchPing(string.Format("{0} -n {1} -l {2} -w {3}", strHost, TryTimes, PacketSize, TimeOut), PacketSize); } } }