【发布时间】: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