开发者

Check if device "connected" / available

I have written a program in C which communicate开发者_JAVA百科s through udp with an Arduino. My question is, how can I "ping" an ip address and only get a 1 or 0 (available or not) in C (unix).

The system("ping xxx.xxx.xxx.xxx"); call doesn't work because it outputs a list...?


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

Should do the trick. -c 1 sends only a single packet. We pipe to /dev/null as we don't care about the output to stdout (is that the list you refer to?). If you also want to discard stderr, add a 2>&1 to the end. You might also want to limit the response time using -W.

The call will return an integer representing the success or failure. 0 indicates success, while a non-zero integer represents failure. Here's some sample code: http://ideone.com/cf0eR

Be aware that a failed ping does not guarantee that the device is offline. Although in your controlled environment, it's probably a reasonable thing to expect it to work.


In general, you can not determine whther a network host is up - a member of an IP network is allowed not to send any packets. The best way is to just start communication and use a protocol that requires the contacted machine to answer in any way.

However, if you are sure the machine answers to ping, but not your UDP packets, use ping -c 1 192.0.32.10. This solution is very brittle though:

  • The machine may not answer to ping
  • The network(i.e. a firewall in between you and the host) may not relay your ping message, but would relay UDP packets fine
  • The network can actually change at any time. When you receive an ping reply, all you know is that the remote host was up when you sent the message
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜