1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        ?C#實現(xiàn)Ping遠程主機功能(支持IP和域名)

        共 3777字,需瀏覽 8分鐘

         ·

        2024-05-30 08:00


        項目上引用nuget包 Wesky.Net.OpenTools(包同時兼容.net standard2.0和2.1,可以被.net framework4.6.1+環(huán)境引用和所有.net core和.net 5以上版本引用)

        OpenTools是一個致力于給.NET開發(fā)者提高開發(fā)效率的開源工具庫。該項目為個人開源項目,采用MIT開源協(xié)議,永不更改協(xié)議。開源項目地址:

        Gitee:https://gitee.com/dreamer_j/open-tools.git
        Github:https://github.com/LittleLittleRobot/OpenTools.git
        個人公眾號:Dotnet Dancer
        工具更新說明:
        1.0.1 提供AES加密解密功能
        1.0.2 提供本地Ping遠程主機功能,包括支持IP地址、域名

        本教程將演示1.0.2版本更新功能,以及包內實現(xiàn)的具體代碼演示。


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

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

         PingHelper.PingHost方法即可,第一個參數(shù)是IP地址或域名,第二個是超時時間,單位毫秒.

        具體源碼和實現(xiàn)說明:

         1  /// <summary>
        2 /// 對指定主機執(zhí)行 ping 操作并返回結果
        3 /// Ping the specified host and return the result
        4 /// </summary>
        5 /// <param name="host">需要被 ping 的主機或 IP 地址 The hostname or IP address to ping</param>
        6 /// <param name="timeout">ping 超時時間,以毫秒為單位 Timeout duration in milliseconds for ping</param>
        7 /// <returns>包含 ping 操作結果的 PingResultInfo 對象 A PingResultInfo object containing the result of the ping operation</returns>
        8 public static PingResultInfo PingHost(string host, int timeout)
        9 {
        10 try
        11 {
        12 // 解析域名獲取 IP 地址
        13 // Resolve the domain name to get IP address
        14 IPAddress[] addresses = Dns.GetHostAddresses(host);
        15 if (addresses.Length == 0)
        16 {
        17 return new PingResultInfo
        18 {
        19 Host = null,
        20 Result = false,
        21 Message = "No IP addresses resolved"
        22 };
        23 }
        24 using (Ping pingSender = new Ping())
        25 {
        26 PingOptions options = new PingOptions
        27 {
        28 // 設置防止數(shù)據(jù)包被分片
        29 DontFragment = true // Prevent packet fragmentation
        30 };
        31
        32 // 數(shù)據(jù)緩沖區(qū),包含要發(fā)送的字符串數(shù)據(jù)
        33 // Data buffer containing the string data to send
        34 string data = "ABCDEFGHIJKLMNOPQRSTUVWXYZ012345";
        35 byte[] buffer = Encoding.ASCII.GetBytes(data);
        36
        37 // 使用第一個解析的 IP 地址進行 ping 操作
        38 // Use the first resolved IP address to perform the ping
        39 IPAddress targetIP = addresses[0];
        40
        41 // 發(fā)送 ping 請求并獲取回復
        42 // Send the ping request and obtain the reply
        43 PingReply reply = pingSender.Send(targetIP, timeout, buffer, options);
        44
        45 // 創(chuàng)建并返回包含 ping 操作結果的 PingResultInfo 對象
        46 // Create and return a PingResultInfo object containing the ping result
        47 return new PingResultInfo
        48 {
        49 Host = targetIP,
        50 Result = reply.Status == IPStatus.Success,
        51 Message = reply.Status == IPStatus.Success
        52 ? $"Success: RoundTrip time={reply.RoundtripTime}ms; TTL={reply.Options.Ttl}; Data size={buffer.Length} bytes"
        53 : $"Failed: Status={reply.Status}",
        54 RoundTripTime = reply.Status == IPStatus.Success ? reply.RoundtripTime : -1,
        55 Ttl = reply.Status == IPStatus.Success ? reply.Options.Ttl : -1,
        56 DataSize = buffer.Length
        57 };
        58 }
        59 }
        60 catch (Exception e)
        61 {
        62 // 捕獲異常并返回錯誤信息
        63 // Catch any exceptions and return error information
        64 return new PingResultInfo
        65 {
        66 Host = null,
        67 Result = false,
        68 Message = $"錯誤: {e.Message} Error: {e.Message}"
        69 };
        70 }
        71 }

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

        并且可以自動解析出來該域名的IP地址(Host)

         如果Ping一個不存在的IP,或者連不上的,例如192.168.0.1

        顯示超時,并且Result狀態(tài)為false,代表沒連上。狀態(tài)值為TimeOut,說明超時了。

         應用場景:

        該功能可以應用于需要不定時驗證某個遠程主機或設備或其他機器是否還在線的情況。并根據(jù)狀態(tài)來展示具體主機是在線還是掉線。


         


         


        瀏覽 29
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            啊啊啊快高潮了视频 | 国产小电影在线观看 | 91n成人网视频在线观看 | 一级国产国产一级 | 国产肉体XXXX裸体784大胆 | 小萝莉的性放荡日记h佳佳 | 黄色色情网站在线观看 | 色婷婷AV一区二区三区之e本道 | 日本泡妞xxxxxxxxx78 | 日本不卡视频在线 |