2014-01-18 9 views
4

JmDNS를 사용하여 네트워크에서 장치 추가 및 제거를 감지하려고합니다. 추가 작업은 정상적으로 작동하지만 각 서비스가 JmDNS에 등록 되 자마자 장치가 검색되지만 장치가 네트워크에서 제거되면 JmDNS에 등록되지 않습니다.JmDNS 장치 제거 감지

정기적으로 jmDns.list (serviceName)을 호출하려했지만 항상 캐시 된 값을 반환하는 것처럼 보입니다.

JmDNS 레지스터를 제거한 장치를 만들 수 있습니까? 여기

내가 서비스 및 서비스 리스너 (단지 관련 부분)을 등록하는 데 사용되는 코드입니다 :

서비스 :

JmDNS jmdns = JmDNS.create(); 
ServiceInfo service = ServiceInfo.create("_test._tcp.local.", "Test", 1234, 0, 0, false, "Test info"); 
jmdns.registerService(service); 

서비스 청취자 :

JmDNS jmDns = JmDNS.create(); 
jmDns.addServiceListener("_test._tcp.local.", new ServiceListener() { 
    @Override 
    public void serviceAdded(ServiceEvent event) { 
     System.out.println("Service added " + event.getInfo()); 
    } 

    @Override 
    public void serviceRemoved(ServiceEvent event) { 
     System.out.println("Service removed " + event.getInfo()); 
    } 

    @Override 
    public void serviceResolved(ServiceEvent event) { 
     System.out.println("Service resolved" + event.getInfo()); 
    } 
}); 

방법 serviceRemoved() 이전에 등록한 장치의 전원이 더 이상 켜지지 않아도이 호출되지 않습니다. 문제를 해결할 수있는 도움에 대해 매우 감사드립니다.

업데이트 : JmDNS는 장치가 네트워크에 없지만 30 분 후에 만 ​​파악합니다. 이 기간을 더 짧게 할 수 있습니까?

답변

1

serviceRemoved() 메서드는 종료하기 전에 제거 된 장치가 자체 등록을 취소 할 때만 호출됩니다. JmDNS는 장치의 존재를 적극적으로 확인하는 것이 아니라 브로드 캐스트 메시지를 듣는 것입니다. 제거 된 장치 자체가 등록 해제되지 않은 경우 JmDNS는 시간 초과 조회 (아마도 귀하의 경우에는 30 분)를 알 수 없습니다. 장치가 아직 있는지 여부를 확인하는 한 가지 방법은 적극적으로 요청하는 것입니다. 이를 수행하는 몇 가지 방법이 있습니다. 나는 JmDNS가 이미 그것을 위해 뭔가를 가지고 있는지 모른다.