2

udp を介して Arduino と通信するプログラムを C で作成しました。私の質問は、IP アドレスを「ping」して、C (unix) で 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/nullstdout への出力は気にしないので、パイプします (それはあなたが参照しているリストですか?)。stderr も破棄する場合は2>&1、末尾に a を追加します。を使用して応答時間を制限することもできます-W

呼び出しは、成功または失敗を表す整数を返します。0 は成功を示し、0 以外の整数は失敗を示します。サンプルコードは次のとおりです: http://ideone.com/cf0eR

ping の失敗は、デバイスがオフラインであることを保証しないことに注意してください。制御された環境ではありますが、それが機能することを期待するのはおそらく合理的なことです.

于 2010-12-27T21:25:05.860 に答える