Android アプリとデスクトップ アプリケーション間の通信に JmDNS 検出を実装しようとしています。次のチュートリアルに従いました: http://home.heeere.com/tech-androidjmdns.html
Android アプリはサービスを登録し、デスクトップ アプリケーションはサービスのリスナーを追加します。4 台中 3 台のデバイスで問題なく動作しましたが、4 台目のデバイス (Android 3.2 を実行している Samsung Galaxy Tab 10.1 PT7500) ではサービスを解決できません。私のハンドラーはイベントを受け取りますが、serviceAdded
イベントは受け取りませんserviceResolved
。jmdns.requestServiceInfo
andも呼び出してみjmdns.getServiceInfo
ましたが、前者は何もせず、後者はタイムアウトして null を返します。
ただし、jmdns-browser はサービスを問題なく解決できるため、デバイスではありません。どちらのデバイスにもファイアウォールはありません。サービスは常に IPv4 アドレスを使用します。
この問題の原因が何か考えられる人はいますか?
サービスを開始するためのコード:
jmdns = JmDNS.create(wifiAddress);
ServiceInfo serviceInfo = ServiceInfo.create(Constants.SERVICE_TYPE,
Constants.SERVICE_NAME, Constants.ZEROCONF_PORT, "my service");
HashMap<String, String> deviceInfoMap = new HashMap<String, String>();
deviceInfoMap.put(Constants.KEY_DEVICE_NAME, getDeviceName());
deviceInfoMap.put(Constants.KEY_DEVICE_ID, getDeviceId());
// ...
serviceInfo.setText(deviceInfoMap);
jmdns.registerService(serviceInfo);
クライアント/リスナーのコード:
jmdns = JmDNS.create();
jmdns.addServiceListener(Constants.SERVICE_TYPE, serviceListener = new ServiceListener() {
@Override
public void serviceResolved(ServiceEvent event) {
System.out.println("Service resolved: " + event.getName() +
" of type " + event.getType());
}
@Override
public void serviceRemoved(ServiceEvent event) {
System.out.println("Service removed: " + event.getName() +
" of type " + event.getType());
}
@Override
public void serviceAdded(ServiceEvent event) {
System.out.println("Service added: " + event.getName() +
" of type " + event.getType());
ServiceInfo info = jmdns.getServiceInfo(event.getType(), event.getName());
System.out.println("Service info: " + info); // --> null
}
});
出力:
Service added: my service @ GT-P7500 of type _mytype._tcp.local.
Service info: null
Service added: my service @ Galaxy Nexus of type _mytype._tcp.local.
Service info: [ServiceInfoImpl@183779345
name: 'my service @ Galaxy Nexus ._mytype._tcp.local.'
address: '/192.168.1.154:4242 ' status: 'DNS: myhost.local.
state: probing 1 task: null', has data
deviceName: Galaxy Nexus
deviceId: <id>
displayDensity: XHDPI
]