2

私の目標は、WIFI ネットワーク内のすべての bonjour サービスを見つけ、その IP/ポートを見つけ、HTTP 経由で通信することです。

iMac でホストされている Bonjour サービスが正しく検出されない - サービス名は見つかったが、ポート = 0、InetAddress[] = null。Windows PC でホストされている同じサービスへの接続は正常に機能しています (あるベンダーの同じバージョンのソフトウェア) - 名前、URL、およびポートが正しく検出されました。Bonjour サービス ブラウザは両方のサービスを正しく認識します。

JmDNS 3.4.0 lib が使用されています。コード例を参照してください (一部のコードは省略されています)。

MulticastLock lock = wifi.createMulticastLock(MULTICAST_LOCK_TAG);
lock.setReferenceCounted(true);
lock.acquire();

final InetAddress inetAddress = getLocalIpAddress();
jmdns = JmDNS.create(inetAddress, JMDNS_NAME);

ServiceInfo[] infos = jmdns.list(CAMERA_SERVERS);

if (infos != null && infos.length > 0) {
    for (int i = 0; i < infos.length; i++) {
        name = infos[i].getName();
        InetAddress[] addresses = infos[i].getInetAddresses();
        url = addresses[0].getHostAddress();
        port = infos[i].getPort();
    }

PS。Apple のdns_sd.jarを試してみましたが、ネイティブ コードに依存しており、Android では使用できません。

何か案は?

ありがとう。

4

2 に答える 2

0

手始めにJmDNS.create、パラメーターを取らないメソッド オーバーロードを使用してみてください。問題は、いくつかのネットワーク インターフェース (モバイルと Wi-Fi) が存在する可能性がありgetLocalIpAddress. JmDNS がこれらのパラメーター自体を推測する方法について詳しくは、こちらをご覧ください。getLocalIpAddressWiFi IPを返すため、PCで動作する理由。おそらく、それが唯一のネットワーク インターフェイスだからです。

また、アクセスしたいサービスが WiFi 経由で利用できることを確認してください。明らかなセキュリティ上の理由から、ワイヤレス ルーターが WiFi ネットワークとイーサネット ネットワークを分離することは非常に一般的です。

于 2012-02-09T10:26:05.763 に答える