C#下实现Ping操作 - (第四十一讲)
视频讲解如下:
这是一种在C#环境下实现Ping的一种方法,程序执行过程中,会在exe所在的目录下生成一个log的目录,记录周期为每小时一个log文件,程序采用bat脚本文件进行启动,exe的程序名称为“ConsoleApp.exe”,bat脚本文件内容如下:
ConsoleApp.exe 127.0.0.1 3
其中第一个参数是需要Ping的IP,第二个参数是Ping的间隔,单位是秒。
执行效果如下:

源代码如下:
using System;
using System.IO;
using System.Net.NetworkInformation;
using System.Threading;
namespace ConsoleApp
{
class Program
{
static void Main(string[] args)
{
if(args != null && args.Length == 2)
{
Console.WriteLine("IP:" + args[0]);
Console.WriteLine("Time:" + args[1]);
MyPing(args[0], int.Parse(args[1]));
}
else Environment.Exit(0);
}
/// <summary>
/// 时间差计算
/// </summary>
/// <param name="tim"></param>
/// <returns></returns>
public static long TimeSecondDif(DateTime tim)
{
return (DateTime.Now.Ticks - tim.Ticks) / 10000000;
}
/// <summary>
/// 另一种保存文件的方式(追加写)
/// </summary>
/// <param name="data"></param>
public static void WriteFile(string data)
{
try
{
Console.WriteLine(data);
string path = Environment.CurrentDirectory + @"\log\";
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
string FileName = path + DateTime.Now.ToString("yyyyMMddhh") + "_log.txt";
using (StreamWriter file = new StreamWriter(FileName, true))
{
file.WriteLine(data);
file.Close();
}
}
catch { }
}
public static void MyPing(string ip, int sec)
{
WriteFile($"{DateTime.Now}:启动");
DateTime time = DateTime.Now;
while (true)
{
try
{
Thread.Sleep(500);
if (TimeSecondDif(time) > sec)
{
time = DateTime.Now;
DateTime dt = DateTime.Now;
PingReply reply = new Ping().Send(ip, 1000);
if (reply.Status == IPStatus.Success)
{
string s = $"{DateTime.Now}:来自 {reply.Address} 的回复:字节={reply.Buffer.Length} 时间={reply.RoundtripTime}ms TTL={reply.Options.Ttl}";
WriteFile(s);
}
else
{
string s = $"{DateTime.Now}:来自 {reply.Address} 的回复:无法访问目标主机。";
WriteFile(s);
}
}
}
catch (Exception e)
{
WriteFile($"程序错误:{e.Message}");
}
}
}
}
}