Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 重新注册服务JMDNS_Java_Jmdns - Fatal编程技术网

Java 重新注册服务JMDNS

Java 重新注册服务JMDNS,java,jmdns,Java,Jmdns,我有一个我认为很简单的问题 我正在尝试使用JmDNS广播一个我已成功完成的服务,但是当应用程序暂停时,我想注销一个服务,然后在恢复应用程序时,重新注册该服务 然而,我在这样做时遇到了一些问题。代码如下: //I use jmdns.create again before these lines which I don't know if i should? mServiceInfo = ServiceInfo.create(registeredServiceName, registeredSe

我有一个我认为很简单的问题

我正在尝试使用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)
07-29 10:38:13.099:W/DNSStateTask(28769):java.lang.StringIndexOutOfBoundsException:length=37;regionStart=0;区域长度=-1
07-29 10:38:13.099:W/DNSStateTask(28769):at java.lang.String.startendandlegth(String.java:593)
07-29 10:38:13.099:W/DNSStateTask(28769):在java.lang.String.substring(String.java:1474)处
07-29 10:38:13.099:W/DNSStateTask(28769):在javax.jmdns.impl.ServiceInfoImpl.decodeQualifiedNameMapForType(ServiceInfoImpl.java:292)
07-29 10:38:13.099:W/DNSStateTask(28769):在javax.jmdns.impl.DNSEntry。(DNSEntry.java:47)
07-29 10:38:13.099:W/DNSStateTask(28769):在javax.jmdns.impl.DNSQuestion.(DNSQuestion.java:220)
07-29 10:38:13.099:W/DNSStateTask(28769):位于javax.jmdns.impl.DNSQuestion$AllRecords。(DNSQuestion.java:184)
07-29 10:38:13.099:W/DNSStateTask(28769):位于javax.jmdns.impl.DNSQuestion.newQuestion(DNSQuestion.java:245)
07-29 10:38:13.099:W/DNSStateTask(28769):位于javax.jmdns.impl.tasks.state.Prober.buildOutgoingForInfo(Prober.java:131)
07-29 10:38:13.099:W/DNSStateTask(28769):位于javax.jmdns.impl.tasks.state.DNSStateTask.run(DNSStateTask.java:125)
07-29 10:38:13.099:W/DNSStateTask(28769):在java.util.Timer$TimerImpl.run(Timer.java:284)
07-29 10:38:13.104:W/JmDNSImpl(28769):正在恢复
07-29 10:38:13.119:W/DNSStateTask(28769):取消程序(192-168-2-2.local.)。运行()异常
07-29 10:38:13.119:W/DNSStateTask(28769):java.lang.StringIndexOutOfBoundsException:length=37;regionStart=0;区域长度=-1
07-29 10:38:13.119:W/DNSStateTask(28769):at java.lang.String.StartAndLength(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):在javax.jmdns.impl.ServiceInfoImpl.decodeQualifiedNameMapForType(ServiceInfoImpl.java:292)
07-29 10:38:13.119:W/DNSStateTask(28769):在javax.jmdns.impl.DNSEntry。(DNSEntry.java:47)
07-29 10:38:13.119:W/DNSStateTask(28769):在javax.jmdns.impl.DNSRecord.(DNSRecord.java:46)
07-29 10:38:13.119:W/DNSStateTask(28769):位于javax.jmdns.impl.DNSRecord$服务(DNSRecord.java:647)
07-29 10:38:13.119:W/DNSStateTask(28769):在javax.jmdns.impl.ServiceInfoImpl.answers(ServiceInfoImpl.java:1195)
07-29 10:38:13.119:W/DNSStateTask(28769):位于javax.jmdns.impl.tasks.state.Canceler.buildOutgoingForInfo(Canceler.java:117)
07-29 10:38:13.119:W/DNSStateTask(28769):位于javax.jmdns.impl.tasks.state.DNSStateTask.run(DNSStateTask.java:125)
07-29 10:38:13.119:W/DNSStateTask(28769):在java.util.Timer$TimerImpl.run(Timer.java:284)

有人能向我解释一下我做错了什么,或者是另一种方法吗。我应用于服务创建的字符串绝对有效,因为它们用于在应用程序的早期注册服务。

我也有同样的问题。事实证明,ServiceInfo.create()在事件类型无效时不会优雅地告诉您。在我的例子中,我将“\u http.\u tcp.”作为事件类型发送。我将我的事件类型更改为“\u http.\u tcp.local”,一切都很正常。希望对您有所帮助。

如果您使用事件类型/服务类型作为“\u http.\u tcp.local”,您是否能够正确获取所有服务?