我反复使用这种方法来监视与本地网络中机器的连接。从 cmd 进行相同的测试时,结果稳定且一致:
C:\Windows\system32>ping -t 192.168.11.12
Pinging 192.168.11.12 with 32 bytes of data:
Reply from 192.168.11.12: bytes=32 time=1ms TTL=126
Reply from 192.168.11.12: bytes=32 time=1ms TTL=126
但是,当从 C# 以 500 毫秒超时运行时,即使在超时到期之前它偶尔也会失败:
public void TestIpAnswersPing()
{
var ip = "192.168.11.12";
var timeout = TimeSpan.FromMilliseconds(500);
var p = new Ping();
foreach (var i in Enumerable.Range(0, 1000))
{
var start = DateTime.Now;
PingReply reply = p.Send(ip, (int)timeout.TotalMilliseconds);
if(reply.Status != IPStatus.Success)
{
Debug.Assert(DateTime.Now - start >= timeout);
}
}
}
如果我将超时更改为 1 秒 - 全部成功通过,平均 ping 时间为 0.9 毫秒。
我发现的唯一类似的事情是 - http://support.microsoft.com/kb/2533627,它没有多大帮助。
为什么会发生这种情况以及如何监控高速连接?