できればRubyでのやり方もお願いします。(処理が遅い等の文句はなしで。)
そのあたりのことは一度 TCP/IP の仕組みを系統的に学習してみるとよいかと思います。
同じサブネット内に対して一斉に通信を送るブロードキャスト通信があります。
あるアプリケーションがこれでブロードキャストメッセージを送り、(通常)同じアプリケーションは
これに応答するようにプログラムされているので、アプリケーション同士が認識できるようになります。
BonjourはZeroconfという技術で、正確にはIPアドレスが不要になっているわけではありません。
そのアルゴリズムについては、「ZeroConfをベースとして設定不要なネットワーク構築を実現」を参照ください。さらに詳しいドキュメントへのリンク集として「Bonjour」が役立つでしょう。
Bonjourのオープンソース・プロジェクトである「Avahi」のソースも参考になります。
Rubyで実装されるのでしたら、ハッシュマップを利用するのがよいでしょう。
なるほど。Bonjourは別の技術なのですか。
やっぱりブロードキャストの方が簡単ですかねー。
ソースを読むのは得意ではなくて;
RubyとBonjourでしたらnet-mdnsライブラリはいかがでしょうか。
ドキュメントに書かれているサンプルコードで動作を確認できます。
なぬ!
これはいいかもですね・・。
検討してみます。
>自分は最初そのアプリが使用するポートにつないでみて、応答があったら〜っ
>ていうのを考えたんですが、
>よく考えたら
>
>・他のアプリがそのポートを使用していた
>・そもそもIPアドレスがわからない
自マシンのIPアドレスとサブネットマスクが分かりますので、
同じセグメントに属しているIPはすべて分かります。
すべてに投げて応答が返ってきたら、採用します。
同じポートで別アプリが立ち上がっていても、応答文の内容で
自ソフトかどうかは分かります。
1度、応答があったらIPアドレスとMACアドレスを保存しておいて
次回からそれを採用します。
また、近くのIPメッセーんジャーを1つ見つけたら、そこには
情報がすでにありますので、1回のアクセスで複数のマシン情報が
取得できます。
ふむふむ。なるほど。 ブロードキャストですか。
自分は最初そのアプリが使用するポートにつないでみて、応答があったら〜っていうのを考えたんですが、
よく考えたら
・他のアプリがそのポートを使用していた
・そもそもIPアドレスがわからない
という欠点が。