Проверьте, если устройство «подключено» / доступно - PullRequest
2 голосов
/ 28 декабря 2010

Я написал программу на C, которая связывается через UDP с Arduino.У меня вопрос, как я могу "пинговать" IP-адрес и получать только 1 или 0 (доступно или нет) в C (unix).

Вызов system("ping xxx.xxx.xxx.xxx"); не работает, потому что он выводитсписок ... * * 1004

Ответы [ 2 ]

2 голосов
/ 28 декабря 2010
system("ping -c 1 127.0.0.1 > /dev/null");

Должен сделать свое дело.-c 1 отправляет только один пакет.Мы перенаправляем на /dev/null, так как нас не волнует вывод на стандартный вывод (это список, на который вы ссылаетесь?).Если вы также хотите отказаться от stderr, добавьте 2>&1 в конец.Вы также можете ограничить время ответа, используя -W.

. Вызов вернет целое число, представляющее успех или неудачу.0 указывает на успех, а ненулевое целое число означает сбой.Вот пример кода: http://ideone.com/cf0eR

Имейте в виду, что сбой проверки связи не гарантирует, что устройство находится в автономном режиме.Хотя в вашей контролируемой среде вполне вероятно, что она будет работать.

2 голосов
/ 28 декабря 2010

Как правило, вы не можете определить, работает ли сетевой хост, - члену IP-сети разрешено не отправлять какие-либо пакеты.Лучший способ - просто установить связь и использовать протокол, который требует, чтобы машина, с которой вы связались, отвечала любым способом.

Однако, если вы уверены, что машина отвечает на ping, но не на ваши UDP-пакеты, используйте ping -c 1 192.0.32.10.Это решение очень хрупкое:

  • Устройство может не отвечать на команду ping
  • Сеть (т. Е. Межсетевой экран между вами и хостом) может не передавать ваше сообщение ping, нобудет ретранслировать UDP-пакеты нормально
  • Сеть может фактически измениться в любое время.Когда вы получаете ответ на эхо-запрос, все, что вы знаете, это то, что удаленный хост был , когда вы отправили сообщение
...