0

我尝试使用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
4

0 回答 0