問題タブ [bonjour]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Bonjour でデバイス IP を取得する
開発には Java 6 update 14 と NetBeans 6.7 を使用しています。Bonjour を使用して特定のタイプのサービスを検出するサンプル クライアントを作成しています。
デバイスの IP アドレスを取得したいという特定の課題に直面しています。ただし、ResolveListener.serviceResolved(...)関数は、ホスト名とポートのみを提供します。FullName には、デバイスの IP 情報も含まれません。Bonjour SDK を使用してデバイスの IP アドレスを取得することはできますか? はいの場合、どのように?
ありがとう。
iphone - ブラウジング中に Bonjour からコールバックされない原因は何ですか?
私は App Store でかなり人気のある Bonjour ベースのアプリケーションを持っています。それは完全に機能しますが、私のユーザーの約 0.2% が奇妙なバグを報告しています:「画面の端に矢印が表示されないので、他の人と共有できません!」. 言うまでもなく、これらの矢印の表示は、ローカル ドメイン上の特定の Bonjour サービスの参照に関連付けられています。
問題は、Apple のレビュー チームが断続的にこの 0.2% に入っているように見えることです。ご想像のとおり、これはレビュー結果には適していません。何度やってもこのバグは再現できません。
NSNetServiceBrowser
私が持っているいくつかのログから、デリゲート呼び出しを受信していないだけで、アプリが正しく実行されているようです。何が原因でしょうか?
私が試したこと:
- 仕様上、長さが 14 文字未満の短いサービス名を持つこと。
@"local."
ではなく公開します@""
(別名 Go Look For The Default Registration Domain)。とにかく、私のアプリは広域ネットワークではかなり役に立ちません。
私が試していないこと: ブラウジング マシンを定期的に再起動します。(ただし、私は 2 つのブラウザーを持っています。1 つは従来の長い名前を探し、もう 1 つは新しい短い名前を探しています。)
何をすべきか?
delphi - Delphi 7 で動作する ZeroConf/Bonjour コードが 2009 年には動作しない
DNSServiceRegister に対して次の宣言があります。
私の Bonjour フレームワークでは、アナウンスされたサービスがアクティブになった場合 (つまり、Bonjour を介して実際にアナウンスを開始する場合) に対して、次の応答があります。
これは厳密に必要だと思うよりも冗長です。確かに、Delphi 7 では非常に冗長な形式で完全に機能していました。デバッグを容易にするために、多くの操作を明示的な手順に拡張しました。たとえば、Delphi 2009 で「内部」で発生している可能性のある文字列ペイロードの暗黙的な変換を識別できるようにしました。
この乱雑に展開された形式でも、このコードは Delphi 7 でコンパイルして完全に動作しますが、Delphi 2009 でコンパイルして実行すると、サービスの通知がありません。
たとえば、このコードを Delphi 7 アプリケーションの一部として実行して_daap._tcp
サービス (iTunes 共有ライブラリ) を登録すると、iTunes の実行中のインスタンスにポップアップが表示されます。Delphi 2009 でまったく同じアプリケーションを変更せずに再コンパイルして実行すると、サービスが iTunes に表示されません。
dns-sdコマンド ライン ユーティリティで監視すると、同じ動作が得られます。つまり、Delphi 7 でコンパイルされたサービス コードは、Delphi 2009 でコンパイルされた期待どおりに動作します。
Bonjour API からエラーが発生しません。DNSServiceRegisterReplyコールバックが ErrorCode 0 (ゼロ)、つまり成功で呼び出されています。フラグで AutoRename を指定して NIL 名前パラメーターを指定すると、サービスに正しい名前が割り当てられます。デフォルト名。しかし、それでもサービスは iTunes に表示されません。
何が起こっているのか途方に暮れています。
コードの拡張からわかるように、私は Delphi 2009 の Unicode 実装によって導入される潜在的なエラーを追跡してきましたが、これは私をどこにも導いていないようです。
このコードは、元々、Bonjour API/SDK のバージョン 1.0.3 に対して開発されました。それ以来、何らかの形で関与していた場合に備えて、1.0.6 に更新しましたが、成功しませんでした。afaict 1.0.6 は、「プロパティ」を取得するための新しい関数を追加しただけで、現在、Bonjour バージョンを取得するための「DaemonVersion」プロパティのみをサポートしています。これは完全に機能しています。
注:現在のコードは、Delphi 7 では技術的に UTF8 セーフではないことを認識しています。Delphi 2009 が適用する自動変換をできるだけ単純にするために、明示的な変換を可能な限り排除しました。私の現在の目標は、これを Delphi 2009 で機能させ、そのソリューションから逆方向に作業して、以前のバージョンの Delphi と互換性のあるアプローチを見つけることです。
注:私は元々、宣伝されているサービスのブラウジング、つまりネットワーク上の実際の iTunes 共有ライブラリの識別にも問題がありました。これらの問題は、Delphi 2009 での Unicode 処理が原因で発生し、解決されました。私の Delphi 2009 コードは、実際の iTunes 共有ライブラリを識別し、その TXT レコードを照会することができます。機能していないのは、このサービス登録だけです。
私は愚かで明白な何かを見逃しているに違いありません。
誰かアイデアはありますか?!
アップデート
この問題に戻って、次のことを発見しました。
D2009 より前の IDE と D2009+ IDE を開いている場合 (D2006 と D2010 など)、同じプロジェクトを両方の IDE に同時にロードすると、次のようになります。
- 2006 でビルドして実行: 動作します - 私のサービス アナウンスメントは iTunes で取り上げられます
- D2010 に切り替えて実行 (ビルドなし): 最小限のコンパイル、実行、および動作を行います。
D2010 でフル ビルドを実行します。動作しなくなります
D2006 に切り替えて実行 (ビルドせずに): 動作しません
- D2006 でフル ビルドを行う: 再び動作する
これは誰かに他のアイデアを与えますか?
security - mDNS(Bonjour、Avahiなど)がUDPを使用するのはなぜですか?
DNSに関する多くの問題、特にセキュリティの問題には、DNSがUDPを介して実装されている根本的な原因があるように思われます。たとえば、レスポンダーは彼が言っている人である必要はありません。
mDNSプロトコル(DNSよりはるかに新しいと思います)の詳細はわかりません。おそらく、アプリケーションレベルでこれらの問題を処理します。誰かが私のためにこれにいくつかの光を当てることができますか?
ruby - RubyのBonjour
私はdnssdを知っています。これはMacOSX専用のネットワーク検出用のAppleのBonjourプロトコル用のRubyライブラリですが、クロスプラットフォームの(比較的最近の/完全な)ライブラリはありますか?
cocoa - ココアでのクライアント間のメッセージング?
えーと、今はクライアントからサーバーではなく、両方のクライアント間でメッセージングを行おうとしています。それで、私が間違っていなければ、サービスを個別に起動することはできませんが、個別に設定されているのか、両方が同じサービスに接続されているのかを確認するにはどうすればよいですか?
サービスを起動するための私のコード:
なにか提案を?
erlang - Erlang で DNS クエリ レコードを作成するにはどうすればよいですか?
ネイティブの Bonjour / Zeroconf ライブラリを構築しており、DNS クエリ レコードを構築して他のマシンにブロードキャストする必要があります。Erlang のソース コードを調べてみましたが、Erlang に比較的慣れていないので、すべての inet_XXX.erl および .hrl ファイルの奥深くに密集しています。DNS レコードのペイロードを受信して解析するリスナーがありますが、クエリ レコードの作成方法がわかりません。本当に知っておく必要があるのは、送信できるバイナリを取得するために inet_dns:encode() に渡す必要があるものです。これが私がやろうとしていることです。
ここに私が得ているエラーがあります
erlang - Erlangでマルチキャストメッセージを送信してポートを再利用するには?
私の最初の REAL Erlang プログラムである私のプログラムは順調にスタートしました。メッセージをリッスンし、読み取り、解析します。私も送ってもらいました。私を悩ませている小さなことは、ポート 5353 で SEND できないことです。すべてを試しました。私のマシン上の他のすべてのアプリケーションは、ポート 5353、SubEthaEdit、iTunes、iChat でリッスンおよび送信できます。
ソリューションは、ポート 5353 でブロードキャスト送信する必要があります。その理由は次のとおりです。
" 受信したマルチキャスト DNS クエリの送信元 UDP ポートがポート 5353 でない場合、これは、クエリを発信したクライアントが、マルチキャスト DNS のすべてを完全に実装していない単純なクライアントであることを示します。この場合、マルチキャスト DNS レスポンダは、クエリ パケットの送信元 IP アドレスとポートへのユニキャストを介して、クライアントに直接返す UDP 応答. このユニキャスト応答は、従来のユニキャスト DNS サーバーによって生成される従来のユニキャスト応答でなければならない. たとえば、クエリ ID を繰り返さなければならない.そしてクエリパケットで与えられた質問。」
それらはすべて、マルチキャスト メッセージの送信時にポート: 5353 を報告します。私は自分のアプリケーションがうまく動作し、同じことをポート 5353 で送信することを本当に望んでいます。これが現在の私のモジュールです。
出力の一部を次に示します。
これは、ローカル ネットワーク上の他のインスタンスを探している SubEthaEdit からのクエリです。Port: 5353 と表示されていることに注意してください。
ここで、ローカル ネットワーク上の iTunes のインスタンスを検索するモジュールからの QUERY を示します。Port: 59795 と表示されていることに注意してください。現在のコードでは、そのポートはランダムです。どうしても5353にしたいです。
UDPマルチキャストについて、難解な洞察を持っている人はいますか? 更新して、回答を受け入れることができるようにします。これしかできないと思います。
iphone - 安全なiPhone-デスクトップ接続
バックグラウンド
iPhone がクライアントとしてデスクトップに接続できるように、デスクトップに IP ベースのサーバーを必要とする多くの App Store リリースの iPhone アプリがあります。たとえば、デスクトップ コンピューターを Wi-Fi 経由で制御できるように、iPhoneのキーボード、タッチパッド、またはApple リモートをエミュレートする多くのプログラムがあります。ただし、これらのアプリケーションの多くは、ユーザーに VNC サーバーのバリアントをインストールするよう要求することで、独自のサーバーを作成することを回避しています。
質問
デスクトップ (Mac および Windows プラットフォーム) に安全な (暗号化された) IP サーバーを実装して、wifi ネットワーク上の iPhone クライアントとの間で単純な双方向メッセージの受け渡しを可能にする最良の方法は何ですか?
ユースケースの例
デスクトップ上のイベントにより、デスクトップは小さな画像またはテキストを iPhone にプッシュします。iPhone でイベントが発生すると、短いテキスト メッセージがデスクトップにプッシュされます。任意の 1 つのイベントがいつでも発生する可能性があります (ユーザーには同期していないように見えます)。
フォローアップの最初の質問
このタイプのプロジェクトは、XML や JSON over HTTP などを使用して処理するのが最適でしょうか? または、BEEP や Bonjour(XMPP) などのより良いプロトコルはありますか?