これは典型的なプログラミングの質問ではありませんが、Bonjour ベースのコードをテストする上で大きな障害になっていることがわかります。
Bonjour は、サーバーがクライアントにその存在を通知するための 2 つのメカニズムをサポートしています。最初にローカル ネットワークでマルチキャストし、次に DNS でマルチキャストします。
マルチキャストは設定がいらないので使いやすいですが、残念ながら同一ネットワーク内でしか使えません。
DNS は、ルーター (インターネット) を介して機能するという贅沢を持っていますが、適切に構成されたネームサーバーと、そのネームサーバーを使用するクライアントが必要です。
あなたには2つの選択肢しかないと思います。
- WiFi ネットワークで bonjour サービスを宣伝する
- 独自の DNS を構成する
最初のケースでは、サービスが必ずしも Mac 上で動作する独自のアプリケーションによってアドバタイズされる必要がないことを理解することが重要です。ユーティリティdns-sd
を使用して、ネットワーク上の任意の IP アドレス/ポートを Bonjour サービスとして登録できます。これが機能するには、WiFi に接続されたマシン (Mac、Linux) が必要であり、dns-sd
そこで次のように実行します。
dns-sd -P "Stack Overflow" _http._tcp . 80 stackoverflow.com 69.59.196.211
これにより、「http」サービスが「Stack Overflow」という名前で Bonjour サービスとして登録されます。チェックアウト - ターミナルで実行し、Bonjour の下の Safari のブックマークでチェックしてください。同じ方法でアプリケーションを登録できます。
残念ながら、これは WiFi ネットワークに接続されたマシンで実行する必要があります。つまり、Mac アプリケーションは独自のイーサネット ネットワークでdns-sd
アドバタイズし、WiFi でアドバタイズします。
2 番目のオプションは少し恐ろしいですが、何らかの管理に手がかかることを厭わないのであれば、大した問題ではありません。
繰り返しますが、サービスを動的に DNS に登録する必要はありません。DNS 構成で Mac の名前とアプリのポートをハードコーディングするだけです。これらは、ゾーン ファイル (DNS 構成ファイル) に追加する必要がある 4 行だけです。
b._dns-sd._udp IN PTR @ ; b = browse domain
lb._dns-sd._udp IN PTR @ ; lb = legacy browse domain
_icool._tcp PTR iCool\ App\ Service._http._tcp
iCool\ App\ Service._http._tcp SRV 0 0 8888 macpro.domain.com.
最初の 2 行は、このドメインで Bonjour が有効になっていることをクライアント (この場合は iOS デバイス) に伝えます。3 行目は、利用可能なタイプのサービス「iCool App Service」があることをクライアントに伝えますicool
。4 行目は、サービスの現在のアドレスとポートをクライアントに通知します。
クライアントは、構成された (または DHCP 経由で取得された) 「検索ドメイン」の DNS エントリを探します。ネットワーク設定を確認してください。
Mac や一部の Linux ボックスでネームサーバーを実行したり、dyndns.com などのサービスを使用したりできます。
お役に立てれば。