<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          ?C#實現(xiàn)Ping遠(yuǎn)程主機功能(支持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遠(yuǎn)程主機功能,包括支持IP地址、域名

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


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

           引用nuget包以后,只需要直接調(diào)用:

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

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

           1  /// <summary>
          2 /// 對指定主機執(zhí)行 ping 操作并返回結(jié)果
          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 操作結(jié)果的 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è)置防止數(shù)據(jù)包被分片
          29 DontFragment = true // Prevent packet fragmentation
          30 };
          31
          32 // 數(shù)據(jù)緩沖區(qū),包含要發(fā)送的字符串?dāng)?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 地址進(jìn)行 ping 操作
          38 // Use the first resolved IP address to perform the ping
          39 IPAddress targetIP = addresses[0];
          40
          41 // 發(fā)送 ping 請求并獲取回復(fù)
          42 // Send the ping request and obtain the reply
          43 PingReply reply = pingSender.Send(targetIP, timeout, buffer, options);
          44
          45 // 創(chuàng)建并返回包含 ping 操作結(jié)果的 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,說明超時了。

           應(yīng)用場景:

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


           


           


          瀏覽 29
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日日夜夜久久视频久久视频 | 毛片链接 | 手机在线看A片 | 亚洲天堂一区二区三区 | 国产精品人妻无码八区牛牛 |