2013-07-29 2 views
6

나는 아주 간단한 문제 일 것이라고 생각했다.서비스 재 등록 JMDNS

나는 JmDNS를 사용하여 성공적으로 처리 한 서비스를 브로드 캐스트하려고 시도하지만 앱이 일시 중지되었을 때 서비스 등록을 취소 한 다음 앱을 다시 시작하고 서비스를 다시 등록하려고합니다.

그러나이 작업을 수행하는 데 문제가 있습니다. 코드는 다음과 같습니다 : 내가 잘못 또는 다른 방법을 뭘하는지

07-29 10:38:13.099: W/DNSStateTask(28769): java.lang.StringIndexOutOfBoundsException: length=37; regionStart=0; regionLength=-1 
07-29 10:38:13.099: W/DNSStateTask(28769): at java.lang.String.startEndAndLength(String.java:593) 

07-29 10:38:13.099: W/DNSStateTask(28769): at java.lang.String.substring(String.java:1474) 

07-29 10:38:13.099: W/DNSStateTask(28769): at javax.jmdns.impl.ServiceInfoImpl.decodeQualifiedNameMapForType(ServiceInfoImpl.java:292) 

07-29 10:38:13.099: W/DNSStateTask(28769): at javax.jmdns.impl.DNSEntry.<init>(DNSEntry.java:47) 

07-29 10:38:13.099: W/DNSStateTask(28769): at javax.jmdns.impl.DNSQuestion.<init>(DNSQuestion.java:220) 

07-29 10:38:13.099: W/DNSStateTask(28769): at javax.jmdns.impl.DNSQuestion$AllRecords.<init>(DNSQuestion.java:184) 

07-29 10:38:13.099: W/DNSStateTask(28769): at javax.jmdns.impl.DNSQuestion.newQuestion(DNSQuestion.java:245) 

07-29 10:38:13.099: W/DNSStateTask(28769): at javax.jmdns.impl.tasks.state.Prober.buildOutgoingForInfo(Prober.java:131) 

07-29 10:38:13.099: W/DNSStateTask(28769): at javax.jmdns.impl.tasks.state.DNSStateTask.run(DNSStateTask.java:125) 

07-29 10:38:13.099: W/DNSStateTask(28769): at java.util.Timer$TimerImpl.run(Timer.java:284) 

07-29 10:38:13.104: W/JmDNSImpl(28769): RECOVERING 
07-29 10:38:13.119: W/DNSStateTask(28769): Canceler(192-168-2-2.local.).run() exception 
07-29 10:38:13.119: W/DNSStateTask(28769): java.lang.StringIndexOutOfBoundsException: length=37; regionStart=0; regionLength=-1 

07-29 10:38:13.119: W/DNSStateTask(28769): at java.lang.String.startEndAndLength(String.java:593) 

07-29 10:38:13.119: W/DNSStateTask(28769): at java.lang.String.substring(String.java:1474) 

07-29 10:38:13.119: W/DNSStateTask(28769): at javax.jmdns.impl.ServiceInfoImpl.decodeQualifiedNameMapForType(ServiceInfoImpl.java:292) 

07-29 10:38:13.119: W/DNSStateTask(28769): at javax.jmdns.impl.DNSEntry.<init>(DNSEntry.java:47) 

07-29 10:38:13.119: W/DNSStateTask(28769): at javax.jmdns.impl.DNSRecord.<init>(DNSRecord.java:46) 

07-29 10:38:13.119: W/DNSStateTask(28769): at javax.jmdns.impl.DNSRecord$Service.<init>(DNSRecord.java:647) 

07-29 10:38:13.119: W/DNSStateTask(28769): at javax.jmdns.impl.ServiceInfoImpl.answers(ServiceInfoImpl.java:1195) 

07-29 10:38:13.119: W/DNSStateTask(28769): at javax.jmdns.impl.tasks.state.Canceler.buildOutgoingForInfo(Canceler.java:117) 

07-29 10:38:13.119: W/DNSStateTask(28769): at javax.jmdns.impl.tasks.state.DNSStateTask.run(DNSStateTask.java:125) 

07-29 10:38:13.119: W/DNSStateTask(28769): at java.util.Timer$TimerImpl.run(Timer.java:284) 

누군가가 나에게 설명 할 수 :

//I use jmdns.create again before these lines which I don't know if i should? 

mServiceInfo = ServiceInfo.create(registeredServiceName, registeredServiceType, registeredServicePort,"Hello"); 

try {  

    jmdnsNetworkDiscoveryManager.registerService(mServiceInfo); 
    } 
catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     Log.i(TAG, "Service Registration Error"); 
    } 

나는이 때 내가 나를 혼란이 오류 로그를 얻을. 서비스 생성에 적용한 문자열은 응용 프로그램에서 이전에 서비스를 등록하는 데 사용되므로 확실히 유효합니다.

답변

5

같은 문제가있었습니다. ServiceInfo.create()는 이벤트 유형이 유효하지 않을 때 정상적으로 알려주지 않습니다. 제 경우에는 "_http._tcp"를 보냈습니다. 이벤트 유형으로 내 이벤트 유형을 "_http._tcp.local"으로 변경했으며 모든 것이 완벽하게 작동합니다. 희망이 도움이됩니다.

+0

이벤트 유형/서비스 유형을 "_http._tcp.local"로 사용하는 경우 모든 서비스를 제대로 가져올 수 있습니까? – sandeepmaaram