【问题标题】:Ping timeout not working in Xamarin android form applicationPing 超时在 Xamarin android 表单应用程序中不起作用
【发布时间】:2016-08-02 08:01:16
【问题描述】:

我正在使用 System.Net.NetworkInformation.Ping 类来 ping 某个 Ip。我正在使用 Xamarin 和 Visual Studio 2015 开发一个 Android 表单应用程序。这是我正在使用的代码。

   int timeout = 100;
   Ping ping= new Ping();
   PingReply reply = ping.Send("209.197.25.1", timeout);

   if (reply != null && reply.Status == IPStatus.Success)
       return reply.RoundtripTime;
   if (reply != null && reply.Status == IPStatus.TimedOut)
       return -1;

一件事是,如果我的 WiFi 已连接,那么无论我给出的超时值有多小(低至 1),我都不会超时,并且回复。RoundtripTime 大于超时(对于这个来说几乎是 300我所在位置的服务器)。 但是如果我的 WiFi 关闭了,那么我会根据我指定的时间超时。

我还尝试在 C# 控制台应用程序上运行相同的代码,它在那里工作得非常好。我也尝试过不同的服务器,结果是一样的。有人可以告诉我我做错了什么吗? 有些人认为我正在使用此代码来检查目的地是否可用,但我不是,我对从一台电脑到另一台电脑的往返时间感兴趣。

【问题讨论】:

  • 绝对需要您执行这样的 ping 操作吗?还有一个插件可以告诉您某个地址是否可达。看看here
  • 尽可能尝试网络请求而不是 ping
  • ICMP 可能在所有情况下都无法正常工作(转发可能被禁用),因此如果您确实想测试可用性,请尝试其他方法。
  • @GeraldVersluis 我想找出数据包到达服务器并返回所需的时间,所以我使用 ping。我不确定是否有其他类可以做到这一点。

标签: c# xamarin xamarin.android xamarin.forms ping


【解决方案1】:

ping.Send() 在仿真时总是失败,所以你需要通过 Java Runtime 命令进行 ping,只需添加:

Java.Lang.Process p1 = Java.Lang.Runtime.GetRuntime().Exec("ping -c 1 www.stackoverflow.com");
int returnVal = p1.WaitFor();

如果正常,您将获得 returnVal = 1,如果错误,您将获得 returnVal = 2,仅此而已。

【讨论】:

【解决方案2】:

@Umer Javaid 我试过这个插件,发现它不能正常工作。这个插件基于 Java.InetAddress.GetByName(host).IsReachable(msT​​imeout);而且这个方法有问题和问题Why does InetAddress.isReachable return false, when I can ping the IP address?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-05
    • 1970-01-01
    • 1970-01-01
    • 2017-08-28
    • 2012-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多