2014-12-18 9 views
3

Android 4.0.4 (API 레벨 15로 인해 NSD 없음)로 .local 호스트 이름을 해결하는 솔루션을 찾고 있습니다. 장치에는 발견 할 서비스가없고 호스트 이름 만 있습니다. 해결 방법에 대한 예제를 제공해 주시겠습니까? jmDNS를 통합했지만 호스트 이름 해석에 사용하는 방법을 모릅니다.android 해결 .local (mDNS)

윈 - 명령 :

ping kcmeasurement.local 

Pinging kcmeasurement.local [10.202.0.29] with 32 bytes of data: 
Reply from 10.202.0.29: bytes=32 time<1ms TTL=64 
... 

감사합니다,

다니엘

답변

3

내가 떨어져 jmDNS를 사용하기위한 요구 사항에서, 귀하의 질문에 거의 같은 요구 사항을 가지고, 그래서 NSD로 해결했습니다. 나는 이것이 당신의 질문에 정확히 답하고 있지 않다는 것을 알고 있지만, 당신과 다른 사람들이 내가 그것을 어떻게 해결했는지보기에 여전히 다소 도움이 될 것이라고 생각했다.

NSD 검색 수신기와 NSD 확인 수신기를 설정하고 검색 수신기 코드 내에 대상 호스트 이름 (예 : "kcmeasurement"또는 내 경우 "garagedoor")에 대한 필터를 추가했습니다.

여기에 블로그 게시물이 있습니다. 자세한 방법을 설명하는 블로그 게시물이 있습니다. 필요한 Android 앱 코드를 처리하는 3 ~ 4 단계를 참조하십시오.

사건에 대한

http://www.dodgycoder.net/2015/02/setting-up-bonjourzeroconfmdnsnsd.html

, 난 당신이 동등한 과정을 수행해야하지만, 단지 NSD 대신 jmDNS 라이브러리를 사용하는 것이라고 생각합니다.

+0

이것은 * 이름 *을 해석하는 대신 mDNS * 서비스 *를 해결하는 것으로 보입니다. 특히, 미리 작성해야하는 rapsberrypi.local mDNS 이름을 인식하는 대신 라즈베리 파이의 구성을 변경하는 것이 좋습니다. 상자. –

0

당신은 주어진 IP 주소의 호스트 이름을 해결하기 위해 InetAddress 클래스를 사용할 수 있어야합니다. 예를 들어, 원래의 질문에 제공되는 IP 주소를 사용하여, 다음과 같은 시도 :

try 
{ 
    String hostname = InetAddress.getByName("10.202.0.29").getHostName(); 
} 
catch (UnknownHostException e) 
{ 
    Log.e("MyApplication", "Attempt to resolve host name failed"); 
} 

을이 네트워크 작업이기 때문에,이 UI 스레드에서 수행되지되어 있는지 확인합니다.

편집

다음과 같이 jmDNS와 로컬 호스트 이름을 해석 할 수 있어야합니다 :

InetAddress localHost = InetAddress.getByName("10.202.0.29"); 
JmDNS jmdns = JmDNS.create(localHost); 
String localHostName = jmdns.getHostName(); 
+1

답장을 보내 주셔서 감사합니다. 불행히도 "kcmeasurement"는 mDNS 호스트 이름이고 내 안드로이드 버전 (4.0.4)에는 내장 mDNS 해결 프로그램이 없기 때문에 작동하지 않습니다. 그래서 InetAddress.getByName을 호출하면 예외가 발견되지 않습니다. – MartoniczD

+1

또한 jmDNS 패키지를 내 Apk에 포함 시켰기 때문에 광고가 작동하지만 .local 이름을 해결하는 방법을 찾지 못했습니다. – MartoniczD

+0

나는 내 대답을 수정했다. 위를 참조하십시오 ... – Willis