2013-07-29 13 views
6

Oldukça basit bir sorun olacağını düşündüğüm şey var.Bir servisi tekrar kaydetme JMDNS

JmDNS'i başarıyla uyguladığım bir hizmeti yayınlamaya çalışıyorum, ancak uygulama duraklatıldığında, bir hizmetin kaydını kaldırmak ve daha sonra uygulamayı sürdürmek için hizmeti yeniden kaydettirmek istiyorum.

Ancak bunu yaparken sorunlara koşuyorum. kod aşağıda: Yanlış ya da alternatif bir yaklaşım ne yapıyorum

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) 

birisi bana açıklayabilir:

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

bu çalıştığımda bana kafa karıştırıcı bu hata günlüğü olsun. Hizmet oluşturmaya uyguladığım dizeler, başvuruda daha önce bir hizmeti kaydettirmek için kullanıldığı için kesinlikle geçerlidir.

cevap

5

Aynı problem vardı. ServiceInfo.create(), olay türünüzün geçersiz olduğu zaman size güzel bir şekilde söyleyemeyeceği ortaya çıkıyor. Benim durumumda "_http._tcp" gönderiyordum. Etkinlik türü olarak. Etkinlik türümü "_http._tcp.local" olarak değiştirdim ve her şey mükemmel çalışıyor. Umarım yardımcı olur.

+0

Olay türünü/Hizmet türünü "_http._tcp.local" olarak kullanırsanız, tüm hizmetleri düzgün şekilde alabiliyor musunuz? – sandeepmaaram