Ping.Send(ip, timeout) в .Net возвращается слишком быстро и жалуется на тайм-аутC#

Место общения программистов C#
Anonymous
Ping.Send(ip, timeout) в .Net возвращается слишком быстро и жалуется на тайм-аут

Сообщение Anonymous »

Я использую этот метод неоднократно, чтобы контролировать подключение к машине в локальной сети. Когда тот же тест выполняется с помощью 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 секунду - все пройдет успешно со средним временем пингов 0,9 мс.

Единственное подобное, что я нашел, это http://support.microsoft.com/kb/2533627, что мало помогает.

Почему это может произойти и как отслеживать высокоскоростное соединение?>

Вернуться в «C#»