2013-07-29 4 views
6

У меня есть то, что я думал, будет довольно простой проблемой.Перерегистрация службы JMDNS

Я пытаюсь использовать JmDNS для трансляции службы, которую мне удалось сделать успешно, однако когда приложение приостановлено, я хочу отменить регистрацию службы, а затем возобновить приложение, перерегистрировать службу.

Я, тем не менее, столкнулся с проблемами, делающими это. Код ниже:

//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"); 
    } 

Когда я пытаюсь это я получаю этот журнал ошибок, который сбивает с толку меня:

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) 

Может кто-нибудь объяснить мне, что я делаю неправильно или альтернативный подход. Строки, которые я применяю к созданию службы, определенно действительны, поскольку они используются для регистрации службы ранее в приложении.

ответ

5

У меня была та же проблема. Оказывается, ServiceInfo.create() не изящно сообщает вам, когда ваш тип события недействителен. В моем случае я отправлял «_http._tcp». как тип события. Я изменил свой тип события на «_http._tcp.local», и все работает отлично. Надеюсь, это поможет.

+0

Если вы используете тип события/тип обслуживания как «_http._tcp.local», можете ли вы правильно обслуживать все службы? – sandeepmaaram