C#?實(shí)現(xiàn)Ping遠(yuǎn)程主機(jī)功能及代碼演示
1、引用nuget包 Wesky.Net.OpenTools
OpenTools是一個(gè)用于提高開(kāi)發(fā)效率的開(kāi)源工具庫(kù)。該項(xiàng)目為個(gè)人開(kāi)源項(xiàng)目,采用MIT開(kāi)源協(xié)議,永不更改協(xié)議。開(kāi)源項(xiàng)目地址:
Gitee:https://gitee.com/dreamer_j/open-tools.git
Github:https://github.com/LittleLittleRobot/OpenTools.git
工具更新說(shuō)明:
1.0.1 提供AES加密解密功能
1.0.2 提供本地Ping遠(yuǎn)程主機(jī)功能,包括支持IP地址、域名
本教程將演示1.0.2版本更新功能,以及實(shí)現(xiàn)的具體代碼演示。

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

引用nuget包以后,只需要直接調(diào)用:
PingHelper.PingHost方法即可,第一個(gè)參數(shù)是IP地址或域名,第二個(gè)是超時(shí)時(shí)間,單位毫秒.

具體源碼和實(shí)現(xiàn)說(shuō)明:
/// <summary>
/// 對(duì)指定主機(jī)執(zhí)行 ping 操作并返回結(jié)果
/// Ping the specified host and return the result
/// </summary>
/// <param name="host">需要被 ping 的主機(jī)或 IP 地址 The hostname or IP address to ping</param>
/// <param name="timeout">ping 超時(shí)時(shí)間,以毫秒為單位 Timeout duration in milliseconds for ping</param>
/// <returns>包含 ping 操作結(jié)果的 PingResultInfo 對(duì)象 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
{
// 設(shè)置防止數(shù)據(jù)包被分片
DontFragment = true // Prevent packet fragmentation
};
// 數(shù)據(jù)緩沖區(qū),包含要發(fā)送的字符串?dāng)?shù)據(jù)
// Data buffer containing the string data to send
string data = "ABCDEFGHIJKLMNOPQRSTUVWXYZ012345";
byte[] buffer = Encoding.ASCII.GetBytes(data);
// 使用第一個(gè)解析的 IP 地址進(jìn)行 ping 操作
// Use the first resolved IP address to perform the ping
IPAddress targetIP = addresses[0];
// 發(fā)送 ping 請(qǐng)求并獲取回復(fù)
// Send the ping request and obtain the reply
PingReply reply = pingSender.Send(targetIP, timeout, buffer, options);
// 創(chuàng)建并返回包含 ping 操作結(jié)果的 PingResultInfo 對(duì)象
// 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)
{
// 捕獲異常并返回錯(cuò)誤信息
// Catch any exceptions and return error information
return new PingResultInfo
{
Host = null,
Result = false,
Message = $"錯(cuò)誤: {e.Message} Error: {e.Message}"
};
}
}我們也可以直接PING域名,例如 www.baidu.com
并且可以自動(dòng)解析出來(lái)該域名的IP地址(Host)

如果Ping一個(gè)不存在的IP,或者連不上的,例如192.168.0.1
顯示超時(shí),并且Result狀態(tài)為false,代表沒(méi)連上。狀態(tài)值為TimeOut,說(shuō)明超時(shí)了。

應(yīng)用場(chǎng)景:
該功能可以應(yīng)用于需要不定時(shí)驗(yàn)證某個(gè)遠(yuǎn)程主機(jī)或設(shè)備或其他機(jī)器是否還在線的情況。并根據(jù)狀態(tài)來(lái)展示具體主機(jī)是在線還是掉線。
到此這篇關(guān)于C# 實(shí)現(xiàn)Ping遠(yuǎn)程主機(jī)功能的文章就介紹到這了,更多相關(guān)C# Ping遠(yuǎn)程主機(jī)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
c#使用IAsyncEnumerable實(shí)現(xiàn)流式分段傳輸
這篇文章主要為大家詳細(xì)介紹了c#如何使用IAsyncEnumerable實(shí)現(xiàn)流式分段傳輸,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-10-10
Unity幸運(yùn)轉(zhuǎn)盤實(shí)戰(zhàn)項(xiàng)目
這篇文章主要為大家詳細(xì)介紹了Unity幸運(yùn)轉(zhuǎn)盤實(shí)戰(zhàn)項(xiàng)目,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-04-04
C#簡(jiǎn)單實(shí)現(xiàn)在網(wǎng)頁(yè)上發(fā)郵件的案例
本文分享一個(gè)C#利用SMTP發(fā)送郵件的案例,提供了前后臺(tái)代碼,方便大家學(xué)習(xí)。2016-03-03
C#?wpf實(shí)現(xiàn)截屏框熱鍵截屏的示例代碼
這篇文章主要為大家詳細(xì)介紹了C#?wpf實(shí)現(xiàn)截屏框熱鍵截屏的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以學(xué)習(xí)一下2023-09-09
C#動(dòng)態(tài)webservice調(diào)用接口
動(dòng)態(tài)調(diào)用webservice,就可以不用添加web引用了,上線的話也只是需要改一下wsdl地址就可以了2015-05-05
深入解析C#設(shè)計(jì)模式中對(duì)橋接模式的具體運(yùn)用
這篇文章主要介紹了C#設(shè)計(jì)模式中對(duì)橋接模式的具體運(yùn)用,橋接模式所強(qiáng)調(diào)的解耦在代碼維護(hù)中非常有用,需要的朋友可以參考下2016-02-02
C#使用iTextSharp從PDF文檔獲取內(nèi)容的方法
這篇文章主要介紹了C#使用iTextSharp從PDF文檔獲取內(nèi)容的方法,涉及C#基于iTextSharp操作pdf文件的相關(guān)技巧,需要的朋友可以參考下2015-06-06
C#調(diào)用mmpeg進(jìn)行各種視頻轉(zhuǎn)換的類實(shí)例
這篇文章主要介紹了C#調(diào)用mmpeg進(jìn)行各種視頻轉(zhuǎn)換的類,實(shí)例分析了C#調(diào)用mmpeg操作視頻文件的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-03-03
C#把UNICODE編碼轉(zhuǎn)換為GB編碼的實(shí)例
下面小編就為大家?guī)?lái)一篇C#把UNICODE編碼轉(zhuǎn)換為GB編碼的實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01

