Re-registering the JMDNS service

I thought I would have a pretty simple problem.

I am trying to use JmDNS to broadcast a service that I managed to do successfully, however when the application is paused, I want to unregister the service, and then renew the application, reregister this service.

However, I run into problems that you make. Code below:

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

When I try to do this, I get this error log, which confuses me:

 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) 

Can someone explain to me what I'm doing wrong or an alternative approach. The lines that I apply to the creation of the service are definitely valid because they are used to register the service earlier in the application.

+6
source share
1 answer

I had the same problem. It turns out that ServiceInfo.create () is not elegantly telling you when your event type is invalid. In my case, I sent "_http._tcp". as an event type. I changed my event type to "_http._tcp.local" and everything works fine. Hope this helps.

+5
source

Source: https://habr.com/ru/post/950510/


All Articles