2

我用 C 语言编写了一个程序,它通过 udp 与 Arduino 进行通信。我的问题是,如何在 C(unix)中“ping”一个 IP 地址并只获得 1 或 0(可用或不可用)。

system("ping xxx.xxx.xxx.xxx");调用不起作用,因为它输出一个列表...?

4

2 回答 2

2

通常,您无法确定网络主机是否已启动 - IP 网络的成员被允许不发送任何数据包。最好的方法是刚开始通信并使用要求被联系机器以任何方式回答的协议。

但是,如果您确定机器响应 ping 而不是您的 UDP 数据包,请使用ping -c 1 192.0.32.10. 这个解决方案虽然很脆弱:

  • 机器可能无法回复 ping
  • 网络(即您和主机之间的防火墙)可能不会中继您的 ping 消息,但会很好地中继 UDP 数据包
  • 网络实际上可以随时更改。当您收到 ping 回复时,您只知道发送消息时远程主机已启动
于 2010-12-27T21:24:52.057 回答
2
system("ping -c 1 127.0.0.1 > /dev/null");

应该做的伎俩。-c 1只发送一个数据包。我们通过管道传输到,/dev/null因为我们不关心标准输出的输出(您指的是那个列表吗?)。如果您还想丢弃 stderr,2>&1请在末尾添加 a。您可能还想使用 限制响应时间-W

该调用将返回一个表示成功或失败的整数。0 表示成功,而非零整数表示失败。这是一些示例代码:http: //ideone.com/cf0eR

请注意,ping 失败并不能保证设备处于脱机状态。尽管在您的受控环境中,期望它起作用可能是合理的。

于 2010-12-27T21:25:05.860 回答