【问题标题】:Ping IPs — One time or multiple times?Ping IP — 一次还是多次?
【发布时间】:2018-01-15 15:48:27
【问题描述】:

我正在使用以下代码 ping IP 地址并检查它是否在线。 现在只想知道,这个 C# 的 ping.Send(ipAddress) 会执行 1 次还是 3 次?

Ping ping = new Ping();
PingReply pingReply = ping.Send(ipAddress);

if (pingReply.Status == IPStatus.Success)
{
    // Proceed as normal.
}
else
{
    // Send email to Admin.
}

【问题讨论】:

  • 我很担心// Proceed as normal 所做的假设。 pingReply 告诉你的只是,在最近的某个时间点,ipAddress 正在响应 ping 请求。它告诉您在ipAddress 上运行的其他一些服务可用并且能够成功执行任何特定的处理工作(甚至未来的ping 也不会成功)。 没有大量的预检查可以保护您免受网络和远程机器不受您的代码控制的事实,因此您需要防御性地编写该代码无论如何
  • @Damien_The_Unbeliever 我同意。但这只是将一些信息作为电子邮件警报发送。比如我每隔一小时检查一次IP是否工作,一直失败,我们要检查一下。

标签: c# ping


【解决方案1】:

拨打ping.Send 将发送一个ICMP 包。 the documentation 中没有任何内容表明进行了多次尝试:

尝试向指定计算机发送 Internet 控制消息协议 (ICMP) 回显消息,并从该计算机接收相应的 ICMP 回显回复消息。

【讨论】:

  • Here is the source code 秒你的答案。
  • @Patrick Hofman 所以如果我想做多个 ping,我应该使用 while 循环还是使用 ping.Send(IP,timeOut) ?
  • 当您想等待更长时间直到单个包失败时,超时很有用。如果你想尝试 3 次,你必须做一个 forwhile 循环。
  • @PatrickHofman 我想,我需要时间。例如,我想尝试(比如说)20 秒的 IP。在所有的秒内,如果它不可用,则表示它处于离线状态。
  • 如果单个包裹因某种原因丢失,您将等待 20 秒。如果您发送 20 个包裹,然后收到 1 个、5 个或 20 个,则说明连接或服务的可靠性。
【解决方案2】:

它会像方法描述所说的那样执行一次 ping。

尝试将带有指定数据缓冲区的 Internet 控制消息协议 (ICMP) 回显消息发送到具有指定 IPAddress 的计算机,并从该计算机接收相应的 ICMP 回显回复消息。此方法允许您为操作指定超时值。

来自here

【讨论】:

  • 嗯,这与 5 分钟前已经给出的答案相同。无需重复。
  • @lucccas 感谢您的帖子。但请阅读堆栈中的“如何回答”部分。
  • 在第一个帖子上线之前尝试回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-29
  • 2019-07-04
  • 2021-04-19
  • 2015-10-21
  • 1970-01-01
  • 2011-10-17
相关资源
最近更新 更多