我正在使用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的往返时间感兴趣。
答案 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。