基于C#实现Ping工具类

 更新时间:2023年11月30日 09:20:23   作者:rjcql  
Ping是一种常用的测试网络连接的工具,可以测试网络延迟和连接状况,以及判断网络是否可用,本文将通过框架类库中的Ping类来实现Ping功能,感兴趣的小伙伴可以了解下

写在前面

Ping是一种常用的测试网络连接的工具,可以测试网络延迟和连接状况,以及判断网络是否可用。在C#中可以通过框架类库中的Ping类来实现Ping功能。Ping类的操作结果是一个PingReply对象;PingReply对象包含有关Ping请求的结果信息,通过解析该对象可以获取Ping请求的结果,包括 Ping的IP地址、返回时间、往返时间等信息。

using System.Net.NetworkInformation;

代码实现

public class PingHelper
{
    public static string PingTest(string urlOrIp)
    {
        var pingSender = new Ping();
        var pingReply = pingSender.Send(urlOrIp, 10);
        return GetPingReplyInfo(pingReply);
    }
 
    public static string PingTest(string urlOrIp, byte[] data)
    {
        var pingSender = new Ping();
        var pingReply = pingSender.Send(urlOrIp, 10, data);
        return GetPingReplyInfo(pingReply);
    }
 
    /// <summary>
    /// 扫描局域网内有多少个ip在用
    /// </summary>
    public static string ScanLAN()
    {
        var sb = new StringBuilder();
        var pingSender = new Ping();
        // 这边要改成多线程来,实在太慢了
        for (int i = 1; i < 256; i++)
        {
            var ip = $"192.168.1.{i}";
            var reply = pingSender.Send(ip, 100);
            if (reply.Status == IPStatus.Success)
            {
                sb.AppendLine(ip);
            }
        }
        return sb.ToString();
    }
 
    private static string GetPingReplyInfo(PingReply pingReply)
    {
        var sb = new StringBuilder();
        sb.AppendLine($"IP Address:{pingReply.Address}");
        sb.AppendLine($"Status:{pingReply.Status}"); // 根据状态来判断是否可达
        sb.AppendLine($"Roundtrip Time:{pingReply.RoundtripTime}");
        sb.AppendLine($"TTL:{(pingReply.Options == null ? -1 : pingReply.Options.Ttl)}");
        sb.AppendLine($"Buffer Length:{pingReply.Buffer.Length}");
        return sb.ToString();
    }
}

调用示例:

var pingResult = PingHelper.PingTest("www.baidu.com");
​​​​​​​var scanResult = PingHelper.ScanLAN();

测试结果

总结

如果再加上一个定时执行的模块,就可以用 Ping 来监控网络中设备的运行状态了,一旦发现设备状态异常,可以立即通知到相关的责任人,以便快速响应。扫描的部分要改成多线程,并发执行提高效率;后续会再完善一下,做一个多线程扫描的小案例。

到此这篇关于基于C#实现Ping工具类的文章就介绍到这了,更多相关C# Ping内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • WPF中TreeView控件的用法

    WPF中TreeView控件的用法

    这篇文章介绍了WPF中TreeView控件的用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • C# DataTable的详细用法分享

    C# DataTable的详细用法分享

    在项目中经常用到DataTable,如果DataTable使用得当,不仅能使程序简洁实用,而且能够提高性能,达到事半功倍的效果,现对DataTable的使用技巧进行一下总结
    2013-11-11
  • C# 使用鼠标点击对Chart控件实现数据提示效果

    C# 使用鼠标点击对Chart控件实现数据提示效果

    这篇文章主要介绍了C# 使用鼠标点击对Chart控件实现数据提示效果,文章给予上一篇的详细内容做延伸介绍,需要的小伙伴可任意参考一下
    2022-08-08
  • 详解C# wpf如何嵌入hwnd窗口

    详解C# wpf如何嵌入hwnd窗口

    wpf是Direct UI,窗口中只有一个hwnd句柄,大部分控件都是直接在上面绘制的,本文主要来和大家讲讲如何嵌入hwnd窗口,感兴趣的可以了解一下
    2024-03-03
  • C#实现把彩色图片灰度化代码分享

    C#实现把彩色图片灰度化代码分享

    这篇文章主要介绍了C#实现把彩色图片灰度化代码分享,用在一些特殊场合中,需要的朋友可以参考下
    2014-08-08
  • 使用设计模式中的工厂方法模式进行C#编程的示例讲解

    使用设计模式中的工厂方法模式进行C#编程的示例讲解

    这篇文章主要介绍了使用设计模式中的工厂方法模式进行C#编程的示例讲解,工厂方法模式可以看作是对简单工厂模式的进一步扩展,需要的朋友可以参考下
    2016-02-02
  • C#保存图片到数据库并读取显示图片的方法

    C#保存图片到数据库并读取显示图片的方法

    将图像保存到SQL server2000的Image字段中
    2013-04-04
  • C#9新特性init only setter的使用

    C#9新特性init only setter的使用

    这篇文章主要介绍了C#9新特性init only setter的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • Unity ScrollView实现动态列表生成

    Unity ScrollView实现动态列表生成

    这篇文章主要为大家详细介绍了Unity ScrollView实现动态列表生成,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • C#域名解析简单实现方法

    C#域名解析简单实现方法

    这篇文章主要介绍了C#域名解析简单实现方法,可实现针对域名解析显示出主机名、IP地址、别名等功能,需要的朋友可以参考下
    2015-07-07

最新评论