IP MessengerやAppleのBonjour、Sambaで、同じLANのPC(IPアドレス)を自動で認識していますが、そういうアルゴリズムはどのようにやっているのかを教えてください。

できればRubyでのやり方もお願いします。(処理が遅い等の文句はなしで。)

回答の条件
  • 1人5回まで
  • 登録:2008/03/23 16:22:34
  • 終了:2008/03/30 16:25:02

回答(4件)

id:Mook No.1

Mook回答回数1312ベストアンサー獲得回数3912008/03/23 16:29:16

ポイント27pt

そのあたりのことは一度 TCP/IP の仕組みを系統的に学習してみるとよいかと思います。


同じサブネット内に対して一斉に通信を送るブロードキャスト通信があります。


あるアプリケーションがこれでブロードキャストメッセージを送り、(通常)同じアプリケーションは

これに応答するようにプログラムされているので、アプリケーション同士が認識できるようになります。

id:kabiy

ふむふむ。なるほど。 ブロードキャストですか。

自分は最初そのアプリが使用するポートにつないでみて、応答があったら〜っていうのを考えたんですが、

よく考えたら

・他のアプリがそのポートを使用していた

・そもそもIPアドレスがわからない

という欠点が。

2008/03/24 16:35:18
id:pahoo No.2

pahoo回答回数5960ベストアンサー獲得回数6332008/03/23 16:48:12

ポイント13pt

BonjourはZeroconfという技術で、正確にはIPアドレスが不要になっているわけではありません。

そのアルゴリズムについては、「ZeroConfをベースとして設定不要なネットワーク構築を実現」を参照ください。さらに詳しいドキュメントへのリンク集として「Bonjour」が役立つでしょう。

Bonjourのオープンソース・プロジェクトである「Avahi」のソースも参考になります。

Rubyで実装されるのでしたら、ハッシュマップを利用するのがよいでしょう。

id:kabiy

なるほど。Bonjourは別の技術なのですか。

やっぱりブロードキャストの方が簡単ですかねー。

ソースを読むのは得意ではなくて;

2008/03/23 16:52:12
id:iwadon No.3

いわどん回答回数60ベストアンサー獲得回数132008/03/23 19:18:02

ポイント40pt

RubyとBonjourでしたらnet-mdnsライブラリはいかがでしょうか。

ドキュメントに書かれているサンプルコードで動作を確認できます。

id:kabiy

なぬ!

これはいいかもですね・・。

検討してみます。

2008/03/23 21:23:37
id:ken33jp No.4

ken33jp回答回数928ベストアンサー獲得回数132008/03/25 02:16:10

ポイント10pt

>自分は最初そのアプリが使用するポートにつないでみて、応答があったら〜っ

>ていうのを考えたんですが、

>よく考えたら

>・他のアプリがそのポートを使用していた

>・そもそもIPアドレスがわからない

自マシンのIPアドレスとサブネットマスクが分かりますので、

同じセグメントに属しているIPはすべて分かります。

すべてに投げて応答が返ってきたら、採用します。

同じポートで別アプリが立ち上がっていても、応答文の内容で

自ソフトかどうかは分かります。

1度、応答があったらIPアドレスとMACアドレスを保存しておいて

次回からそれを採用します。

また、近くのIPメッセーんジャーを1つ見つけたら、そこには

情報がすでにありますので、1回のアクセスで複数のマシン情報が

取得できます。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません