2010-12-27 18 views
2

Ich habe ein Programm in C geschrieben, das über udp mit einem Arduino kommuniziert. Meine Frage ist, wie kann ich eine IP-Adresse "Ping" und nur eine 1 oder 0 (verfügbar oder nicht) in C (Unix).Überprüfen, ob das Gerät "angeschlossen"/verfügbar ist

Der Anruf funktioniert nicht, weil er eine Liste ausgibt ...?

Antwort

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

sollte es tun. -c 1 sendet nur ein einzelnes Paket. Wir pipen zu /dev/null, weil uns die Ausgabe auf stdout egal ist (ist das die Liste, auf die Sie sich beziehen?). Wenn Sie auch stderr verwerfen möchten, fügen Sie am Ende eine 2>&1 hinzu. Möglicherweise möchten Sie auch die Antwortzeit mithilfe von -W begrenzen.

Der Aufruf gibt eine Ganzzahl zurück, die den Erfolg oder Fehler darstellt. 0 gibt Erfolg an, während eine Ganzzahl ungleich Null einen Fehler darstellt. Hier ist ein Beispielcode: http://ideone.com/cf0eR

Beachten Sie, dass ein fehlgeschlagener Ping nicht garantiert, dass das Gerät offline ist. In Ihrer kontrollierten Umgebung ist es wahrscheinlich vernünftig zu erwarten, dass es funktioniert.

+0

Ich habe es versucht, aber es gibt tatsächlich nichts aus, wenn das Gerät verbunden ist oder nicht ... – JNK

+0

@JNK Die 'system()' Funktion gibt eine ganze Zahl, wie ich erklärte. Ich habe absichtlich alle anderen Ausgaben durch Verlegen nach '/ dev/null' verworfen. – marcog

+0

Mein Fehler ... funktioniert! : D – JNK

2

Im Allgemeinen können Sie nicht feststellen, ob ein Netzwerk-Host aktiv ist - ein Mitglied eines IP-Netzwerks darf keine Pakete senden. Der beste Weg besteht darin, einfach die Kommunikation zu starten und ein Protokoll zu verwenden, bei dem die kontaktierte Maschine auf irgendeine Weise antworten muss.

Wenn Sie jedoch sicher sind, dass das Gerät auf Ping reagiert, aber nicht auf Ihre UDP-Pakete, verwenden Sie ping -c 1 192.0.32.10. obwohl diese Lösung ist sehr spröde:

  • Die Maschine nicht
  • Das Netzwerk Ping kann beantworten (dh eine Firewall zwischen Ihnen und dem Host) nicht erlaubt, Ihre Ping-Nachricht weiterleiten, sondern UDP-Relay-Pakete feinen
  • Das Netzwerk kann sich jederzeit ändern. Wenn Sie eine Ping-Antwort erhalten, alles, was Sie wissen, ist, dass die Remote-Host war, wenn Sie die Nachricht gesendet
Verwandte Themen