.Net中的Ping.Send(ip,timeout)返回太快,并在超时时抱怨

Ili*_*ski 5 c# network-programming .net-4.0

我反复使用此方法,以便监视与本地网络中计算机的连接。使用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
Run Code Online (Sandbox Code Playgroud)

但是从C#运行500毫秒超时时,它有时甚至会在超时到期之前失败:

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
Run Code Online (Sandbox Code Playgroud)

如果我将超时更改为1秒-所有操作均成功通过,平均ping为0.9毫秒。

我发现的唯一类似的东西是-http: //support.microsoft.com/kb/2533627,它没有太大帮助。

为什么会发生这种情况,以及如何监视高速率连接?

dhc*_*cgn 0

我遇到了同样的问题并通过多次尝试修复了它。并且不知道是否 Thread.Sleep(50); 是必要的,但似乎有帮助。

Buffer、TimeOut、TTL 都是万金油;)

    private PingReply Ping(string ip, int tryCount = 0)
    {
        var ping = new Ping();
        byte[] buffer = new byte[65500];

        var pingReply = ping.Send(ip, 500, buffer, new PingOptions(600, false));
        if (pingReply.Status == IPStatus.Success)
        {
            return pingReply;
        }

        if (tryCount < 5)
        {
            Thread.Sleep(50);
            return Ping(ip, tryCount + 1);
        }
        return pingReply;
    }
Run Code Online (Sandbox Code Playgroud)