Ping超时在Xamarin android表单应用程序

时间:2016-08-02 08:01:16

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

我正在使用System.Net.NetworkInformation.Ping类来ping某个Ip。我正在使用Xamarin和visual Studio 2015开发Android Form应用程序。以下是我正在使用的代码。

   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)有多小,我永远不会超时,而且reply.RoundtripTime大于超时(这几乎是300)我所在位置的服务器)。 但如果我的WiFi关闭,那么我会根据我指定的时间超时。

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

2 个答案:

答案 0 :(得分:0)

@Umer Javaid我试过这个插件,发现它无法正常工作。此插件基于Java.InetAddress.GetByName(host).IsReachable(msTimeout);此方法存在问题和问题Why does InetAddress.isReachable return false, when I can ping the IP address?

答案 1 :(得分:0)

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。