LoginSignup
10
8

More than 5 years have passed since last update.

IPアドレスの手打ちはもうやめたいと思ってaddonを書いた

Posted at

この記事は何?

自作のopenFrameworks addonの紹介と宣伝です。
https://github.com/nariakiiwatani/ofxSearchNetworkNode

なにができるの?

  • 同じネットワーク内にあるホストを勝手に発見して相互にIPアドレスを教えあってくれる
  • 接続や切断のイベントを通知してくれる
  • ホストに名前をつけられる
  • ホストにグループを設定できる(複数設定可)
    • 同じグループのホストだけ発見するとか
    • 特定のグループのホストだけ発見するとか
  • 他のホストから発見されないようにもできる(シークレットモード)

つまり複数デバイスを連携する時に
それぞれの端末のIPアドレスを調べて設定ファイルとかコードとかに手打ちしなくてよくなる

ということ。

使い方

using namespace std;

// 最小の使い方であればこれだけでOK
ofxSearchNetworkNode search;
search.setup(8000, "my name"); // 通信(UDP)に使うポートと、他ホストに通知する自分の名前
search.request();

// あとはgetNodesでいま見えるノード(ホスト)のIPアドレスとその他情報のmapを取得したり
const map<string, ofxSearchNetworkNode::Node> &nodes = search.getNodes();

// イベントリスナを登録したりできる
ofAddListener(search.nodeFound, this, &ofApp::onFoundNode);
void ofApp::onFoundNode(const pair<string, ofxSearchNetworkNode::Node> &node) {
    cout << "node found : " << node.first << "," << node.second.name << "(" << node.second.groups << ")" << endl;
}

その他の使い方はofxSearchNetworkNode.hを読んでください。

(例)Mac1台と不特定多数のiPhoneを連携したい

グループをmyApp,mobileに設定したiPhoneアプリを配布してMacのグループをmyApp,laptopに設定しておくと
同じネットワークに繋がってさえいればiPhoneアプリが起動した瞬間にMacからそのデバイスを発見することができる。(Macアプリが後から立ち上がっても問題ない)
nodeFoundイベントでnode.groupをチェックして、見つかったホストがiPhoneなのかMacなのかも判断できる。

その他

  • これはoF以外の環境でも相互に使えると良いと思うのだけど、そのためにはoF非依存にして.aなり.libなり.dllなりで書き出せば良いのかな?やり方調べねばだなあ。
  • 現バージョン(2017.5.9時点)ではWindowsやAndroidだと自分でブロードキャストアドレスを入力しなきゃいけなかったり、発見したホストが自分自身かどうかが判断できなかったりするんだけど誰かソケット部分書いてくれないかなあ。
10
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
8