jmdns를 통해 서비스를 검색 할 수 없습니다 : Android.
-
02-01-2020 - |
문제
API-14 이상을 지원해야하므로 Android에서 제공하는 네트워크 검색 서비스를 사용할 수 없습니다.
그래서, 나는이 목적을 위해 JMDNS 라이브러리를 시도했다.
JMDNS 구현을 거의 두 가지 질문이 있습니다. 질문 # 1
나는 다음 코드를 구현했지만 어떤 서비스도 발견 할 수 없습니다.동일한 목적과 동일한 네트워크에서 NSD를 사용하면 해당 서비스를 발견 할 수 있습니다.그래서 나는 내 코드에 무엇이 잘못되었는지 확신합니다.누군가가 도움을 줄 수 있습니까?
public void onDiscoveryRequested(View v) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
setUp();
}});
thread.start();
}
private String type = "_http._tcp.";
private JmDNS jmdns = null;
private ServiceInfo serviceInfo;
android.net.wifi.WifiManager.MulticastLock lock;
android.os.Handler handler = new android.os.Handler();
private void setUp() {
android.net.wifi.WifiManager wifi = (android.net.wifi.WifiManager) getSystemService(android.content.Context.WIFI_SERVICE);
WifiInfo wifiinfo = wifi.getConnectionInfo();
int intaddr = wifiinfo.getIpAddress();
byte[] byteaddr = new byte[] { (byte) (intaddr & 0xff), (byte) (intaddr >> 8 & 0xff),
(byte) (intaddr >> 16 & 0xff), (byte) (intaddr >> 24 & 0xff) };
InetAddress addr = null;
try {
addr = InetAddress.getByAddress(byteaddr);
} catch (UnknownHostException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
lock = wifi.createMulticastLock("mylockthereturn");
lock.setReferenceCounted(true);
lock.acquire();
try {
jmdns = JmDNS.create(addr);
jmdns.addServiceListener(type, new ServiceListener() {
@Override
public void serviceResolved(ServiceEvent ev) {
Log.e("tag", "Service resolved: " + ev.getInfo().getQualifiedName() + " port:" + ev.getInfo().getPort()
+ " ip:" + ev.getInfo().getInetAddresses().toString());
}
@Override
public void serviceRemoved(ServiceEvent ev) {
Log.e("tag", "Service removed: " + ev.getName());
}
@Override
public void serviceAdded(ServiceEvent ev) {
// Required to force serviceResolved to be called again (after the first search)
jmdns.requestServiceInfo(ev.getType(), ev.getName(), 1);
Log.e("tag", "Service added: " + ev.getInfo().getQualifiedName() + " port:" + ev.getInfo().getPort()
+ " ip:" + ev.getInfo().getInetAddresses());
}
});
} catch (IOException e) {
e.printStackTrace();
return;
}
}
.
질문 # 2 JMDNS를 통해 네트워크에서 모든 실행 서비스를 발견하는 방법이 있습니까?
누군가가 위의 두 가지 질문으로 나를 도와 주실 수 있습니까?
감사와 감사와 관련, Sunny
해결책
"_http._tcp.local"을 사용해보십시오.귀하의 서비스 유형으로.AirPlay와 함께 JMDN을 사용할 때 비슷한 문제를 보았습니다.
제휴하지 않습니다 StackOverflow