C# 实现Ping远程主机功能及代码演示

 更新时间:2024年05月13日 08:59:47   作者:WeskyNet  
这篇文章主要介绍了C# 实现Ping远程主机功能,本教程将演示1.0.2版本更新功能,以及实现的具体代码演示,需要的朋友可以参考下

1、引用nuget包 Wesky.Net.OpenTools

OpenTools是一个用于提高开发效率的开源工具库。该项目为个人开源项目,采用MIT开源协议,永不更改协议。开源项目地址:

Gitee:https://gitee.com/dreamer_j/open-tools.git
Github:https://github.com/LittleLittleRobot/OpenTools.git
工具更新说明:
1.0.1 提供AES加密解密功能
1.0.2 提供本地Ping远程主机功能,包括支持IP地址、域名

本教程将演示1.0.2版本更新功能,以及实现的具体代码演示。

咱们先看一下正常的Ping的效果:

引用nuget包以后,只需要直接调用:

PingHelper.PingHost方法即可,第一个参数是IP地址或域名,第二个是超时时间,单位毫秒.

具体源码和实现说明:

/// <summary>
 /// 对指定主机执行 ping 操作并返回结果
 /// Ping the specified host and return the result
 /// </summary>
 /// <param name="host">需要被 ping 的主机或 IP 地址 The hostname or IP address to ping</param>
 /// <param name="timeout">ping 超时时间,以毫秒为单位 Timeout duration in milliseconds for ping</param>
 /// <returns>包含 ping 操作结果的 PingResultInfo 对象 A PingResultInfo object containing the result of the ping operation</returns>
 public static PingResultInfo PingHost(string host, int timeout)
 {
     try
     {
         // 解析域名获取 IP 地址
         // Resolve the domain name to get IP address
         IPAddress[] addresses = Dns.GetHostAddresses(host);
         if (addresses.Length == 0)
         {
             return new PingResultInfo
             {
                 Host = null,
                 Result = false,
                 Message = "No IP addresses resolved"
             };
         }
         using (Ping pingSender = new Ping())
         {
             PingOptions options = new PingOptions
             {
                 // 设置防止数据包被分片
                 DontFragment = true // Prevent packet fragmentation
             };
             // 数据缓冲区,包含要发送的字符串数据
             // Data buffer containing the string data to send
             string data = "ABCDEFGHIJKLMNOPQRSTUVWXYZ012345";
             byte[] buffer = Encoding.ASCII.GetBytes(data);
             // 使用第一个解析的 IP 地址进行 ping 操作
             // Use the first resolved IP address to perform the ping
             IPAddress targetIP = addresses[0];
             // 发送 ping 请求并获取回复
             // Send the ping request and obtain the reply
             PingReply reply = pingSender.Send(targetIP, timeout, buffer, options);
             // 创建并返回包含 ping 操作结果的 PingResultInfo 对象
             // Create and return a PingResultInfo object containing the ping result
             return new PingResultInfo
             {
                 Host = targetIP,
                 Result = reply.Status == IPStatus.Success,
                 Message = reply.Status == IPStatus.Success
                     ? $"Success: RoundTrip time={reply.RoundtripTime}ms; TTL={reply.Options.Ttl}; Data size={buffer.Length} bytes"
                     : $"Failed: Status={reply.Status}",
                 RoundTripTime = reply.Status == IPStatus.Success ? reply.RoundtripTime : -1,
                 Ttl = reply.Status == IPStatus.Success ? reply.Options.Ttl : -1,
                 DataSize = buffer.Length
             };
         }
     }
     catch (Exception e)
     {
         // 捕获异常并返回错误信息
         // Catch any exceptions and return error information
         return new PingResultInfo
         {
             Host = null,
             Result = false,
             Message = $"错误: {e.Message} Error: {e.Message}"
         };
     }
 }

我们也可以直接PING域名,例如 www.baidu.com

并且可以自动解析出来该域名的IP地址(Host)

如果Ping一个不存在的IP,或者连不上的,例如192.168.0.1

显示超时,并且Result状态为false,代表没连上。状态值为TimeOut,说明超时了。

应用场景:

该功能可以应用于需要不定时验证某个远程主机或设备或其他机器是否还在线的情况。并根据状态来展示具体主机是在线还是掉线。

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

相关文章

  • Unity实现物体左右移动效果

    Unity实现物体左右移动效果

    这篇文章主要为大家详细介绍了Unity实现物体左右移动效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • WPF通过使用C#代码给控件赋值

    WPF通过使用C#代码给控件赋值

    开发中偶尔会用到使用c#代码给控件赋值,这里需要通过F12找到控件的赋值类型,然后在看控件可以使用那种方式赋值,花点时间研究一下,基本都可以通过c#代码给控件赋值的,需要的朋友可以参考下
    2023-09-09
  • Unity打开淘宝app并跳转到商品页面功能的实现方法

    Unity打开淘宝app并跳转到商品页面功能的实现方法

    这篇文章主要给大家介绍了关于如何利用Unity打开淘宝app并跳转到商品页面功能的相关资料,这个功能目前在网上找不到相关的解决方法,所以自己写了出来,需要的朋友可以参考下
    2021-07-07
  • C#多线程系列之线程的创建和生命周期

    C#多线程系列之线程的创建和生命周期

    这篇文章介绍了C#多线程系列之线程的创建和生命周期,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-02-02
  • C# OpenCvSharp实现去除文字中的线条

    C# OpenCvSharp实现去除文字中的线条

    这篇文章主要为大家详细介绍了C#如何使用OpenCvSharp实现去除文字中的线条效果,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-11-11
  • C#判断指定文件是否是只读的方法

    C#判断指定文件是否是只读的方法

    这篇文章主要介绍了C#判断指定文件是否是只读的方法,涉及C#中Attributes属性的使用技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • 使用C#实现解析Excel公式

    使用C#实现解析Excel公式

    在日常工作中,我们经常需要在Excel中使用公式对表中数据进行计算和分析,所以本文小编主要来和大家介绍一下如何在C#中实现解析Excel公式,感兴趣的可以了解下
    2024-02-02
  • C#实现Excel转PDF时设置内容适应页面宽度

    C#实现Excel转PDF时设置内容适应页面宽度

    将Excel转为PDF格式时,通常情况下转换出来的PDF页面都是默认的宽度大小。所以本文提供了C#实现Excel转PDF时设置内容适应页面宽度的示例代码,需要的可以参考一下
    2022-04-04
  • C#实现俄罗斯方块基本功能

    C#实现俄罗斯方块基本功能

    这篇文章主要为大家详细介绍了C#实现俄罗斯方块的基本功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • C#事件订阅发布实现原理详解

    C#事件订阅发布实现原理详解

    这篇文章主要介绍了C#事件订阅发布实现原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-12-12

最新评论