我编写了一个 Windows 服务,它通过(除其他外)对 LAN 上的设备进行 ping 操作(使用 Ping.Send()
;.NET 4.6.1)来监视这些设备。对于少量电脑 (3),我“偶尔”(每天一次?)会得到 PingException
来自Send(<ipaddr>, 5000)
,与 InnerException.Message == "No such host is known"
。下次Send()
执行(~60秒后),它成功了。我使用的是 IP 地址,而不是名称,因此这不是 DNS 问题。
我与网络管理员讨论了这个问题,但他们不认为物理硬件有任何问题。此错误还表明什么其他问题?
最佳答案
Ping.Send()
具有各种参数,其中包括字符串参数类型,可以是有效的 IP 地址或有效的主机名。我怀疑您使用了 string
参数之一,有时传递了无效的 IP(额外的空格、无效的 IP 等...),并且 Send()
方法有条件地解决了该问题您必须传递主机名,因此有关 DNS 的异常(exception)情况。
为什么不使用 IPAddress
类型的参数,而不是发送字符串
正如您已经说过的,它应该始终是一个 IP。您可以通过尝试将 string
解析为 IPAddress
来完成此操作,如下所示:
if (IPAddress.TryParse("**IP String**", out var ip))
{
using (var pong = new Ping())
{
pong.Send(ip);
//Etc...
}
}
请注意,无论您以何种方式查看无效数据,您仍然需要修复无效数据。
关于c# - PingException "No such host is known"的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50912713/