我尝试使用Ping.SendPingAsync(host, timeOut) API 获取域的 ping 时间。与我在终端中观察到的值相比,PingReply.RoundtripTime 值似乎总是更高。
更准确地说,对于同一个域google.com
,当我在 macOS 上调用方法时,reply.RoundtripTime 为 76 到 78 毫秒SendPingAsync
,而当我向终端发送命令时,该值为 54 到 56 毫秒。
Terminal command: Ping google.com
Response: 64 bytes from 74.125.24.113: icmp_seq=156 ttl=104 time=54.082 ms
这是我的完整测试代码:
private async Task PingAsync()
{
for(int i=0; i<100; i++)
{
var ping = new Ping();
PingReply reply = await ping.SendPingAsync("google.com", 500);
if (reply.Status == IPStatus.Success)
{
Console.WriteLine("Address: {0}", reply.Address.ToString());
Console.WriteLine("RoundTrip time: {0}", reply.RoundtripTime);
}
else
{
Console.WriteLine("Failed to get ping detials");
}
await Task.Delay(1000);
}
}
注意:我为我的 win 项目 (WPF) 使用了相同的代码,它按预期工作,响应时间非常接近 Windows API 响应和终端 ping 时间。
你能建议我如何在我的 Xamarin.Mac 应用程序上获得 ping 时间吗?任何形式的帮助将不胜感激。
此应用程序的平台和版本:
- Xamarin.Mac 6.20.2
- .Net 框架 4.8
- Mono JIT 编译器版本 6.12.0.93
- macOS Catalina 版本 10.15.2