ローカル ネットワーク内のマシンへの接続を監視するために、この方法を繰り返し使用しています。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、これはあまり役に立ちません。
これが発生する理由と、高速接続を監視する方法を教えてください。