c# - System.Net.NetworkInformation.Ping 崩溃

标签 c# ping

所以,我有一个拥有 600 多台设备的网站。我正在尝试使用标准的 .NET ping 类对它们一一进行 ping。出于某种原因,该线程正在崩溃 - 它只是在几天后停止响应。它所做的只是 ping 网络上的设备。我们使用的是 Microsoft Windows Server 2008 R2。 .NET ping 类有什么问题吗?我似乎也遇到了内存泄漏,我猜这是由于 ping 造成的。我应该只写一个 win32 ping dll 来为我完成这项工作,还是我在 .NET 上做错了什么?

private void PingDevice(out bool state, string IP)
{
    PingReply pingReply;
    System.Net.NetworkInformation.Ping pingSender = null;
    state = false;
    try
    {
        pingSender = new System.Net.NetworkInformation.Ping();
        pingReply = pingSender.Send(IP, 4000);
        state = (pingReply.Status == IPStatus.Success); // comms is on/off
    }
    catch (Exception ex)
    {
        PingGlobals.driverThread.LogIt("$E Pinging Devices:" + ex.Message + ", " + IP);
    }
    finally
    {
        if (pingSender != null)
        {
            ((IDisposable)pingSender).Dispose();
        }
    }
}

最佳答案

在使用 Ping 的异步版本时,我发现有时 Ping 永远不会返回。我可以想象,如果这种情况发生在异步上,在同步上,它就会停止。我为 Async 找到的答案是设置超时(比 Ping 超时长),然后在 SendAsync 之前调用 SendAsyncCancel 重试。

关于c# - System.Net.NetworkInformation.Ping 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13173068/

相关文章:

c# - 如何设置属性网格的选定项

c# - .NET 4 MVC 2 带有注释警告而不是错误的验证

c# - 如何在 .NET 中对每次调用进行证书固定?

启动进程时 Java Android ping IOException "Too many files open"

c++ - 从 C++ 代码检查互联网连接

c# - 如何在不更改原始列表的情况下更改新列表?

c# - JavaScriptSerializer 序列化内部属性成员

linux - Bash Ping 站点检查脚本。 (超时时间更长)

bash - 如何使用 bash 测试 Internet 连接?

heroku - 无法阻止服务 ping 我的 heroku 应用程序