5

そのため、Android 3.2.1 (HTC Flyer) で jmdns を使用しようとしており、サービス検出に jmdns を使用しています。私の 3 つのデバイスのうちの 1 つ (残りのデバイスは正常に動作) が IPv4 ではなく IPv6 アドレスをブロードキャストしていることを除いて、すべて正常に動作します。それらはすべてDHCP経由でホームネットワークに接続されているため、すべてIPv4アドレスが割り当てられているため、これは非常に奇妙です.

だから私のデバイスで私は実行します

    android.net.wifi.WifiManager wifi = (android.net.wifi.WifiManager) getSystemService(android.content.Context.WIFI_SERVICE);
    multicastLock = wifi.createMulticastLock("mylockthereturn");
    multicastLock.setReferenceCounted(true);
    multicastLock.acquire();
    try {
        jmdns = JmDNS.create();

        jmdns.registerServiceType(jmdnsType);
        String jmdnsName = /* Read from db */;
        serviceInfo = ServiceInfo.create(jmdnsType, huggler_id, server.getLocalPort(), " blah blah");

        jmdns.registerService(serviceInfo);
        Log.d(TAG, "JMDNS service registered on ip " + jmdns.getInterface());
    } catch (IOException e) {
        Log.e(TAG, "Error creating JMDNS service (" + e.getMessage() + ")");
        e.printStackTrace();
    }

そして、ネットワークによって割り当てられたものと実際に一致する素敵なIPv4 IPを出力します(成功)。

しかし、他のデバイスでサービスを検出するコードを実行すると.

for(ServiceInfo si : jmdns.list(jmdnsType, 6000)) { // timeout: 6s
        if (si.getName().equals(jmdnsNAme))
            continue;
        try {
            Log.d(TAG, "Host has " + si.getInet4Addresses().length + "  v4 addresses. ");
            Log.d(TAG, "Host has " + si.getInet6Addresses().length + " v6 addresses. ");


}

Flyer が検出されると、v6 アドレスが 1 つだけ表示されます。

誰が何が起こったのかを示唆できますか?

私は Jmdns 3.4.0 を使用しており (3.4.1 はまったく機能しません!)、私は zeroconf 初心者のようなものです。

アップデート:

いくつかの新しい情報:

    D/Huggler ( 5691): Host has 0 v4 addresses. 
    D/Huggler ( 5691): Host has 1 v6 addresses. 
    D/Huggler ( 5691): Host IPv6 address is fe80::66a7:69ff:feeb:9083
    D/Huggler ( 5691): Host IPv6 hostname is fe80::66a7:69ff:feeb:9083
    D/Huggler ( 5691): Host is linklocal true

誰かがそれらを解釈するのを助けることができますか?

4

1 に答える 1

8

同じ問題が発生していましたが、jmDNS.create への呼び出しで InetAddress を渡すとうまくいくようです。

だから、次のようなものを試してください:

WifiManager wifi =   (WifiManager)getActivity().getSystemService(android.content.Context.WIFI_SERVICE);
String ip = Formatter.formatIpAddress(wifi.getConnectionInfo().getIpAddress());
jmdns = JmDNS.create(InetAddress.getByName(ip));
于 2013-05-21T12:19:28.020 に答える