检查设备是否“已连接”/可用

时间:2010-12-27 21:16:47

标签: c networking udp ping

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

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

2 个答案:

答案 0 :(得分:2)

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

但是,如果您确定机器应答ping而不是UDP数据包,请使用ping -c 1 192.0.32.10。这个解决方案非常脆弱:

  • 机器可能无法接听ping
  • 网络(即您和主机之间的防火墙)可能无法中继您的ping消息,但会正常中继UDP数据包
  • 网络实际上可以随时更改。当您收到ping回复时,您所知道的是,当您发送消息时,远程主机

答案 1 :(得分:2)

system("ping -c 1 127.0.0.1 > /dev/null");

应该做的伎俩。 -c 1仅发送一个数据包。我们管道到/dev/null,因为我们不关心输出到stdout(你引用的列表是什么?)。如果您还想丢弃stderr,请在末尾添加2>&1。您可能还希望使用-W限制响应时间。

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

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