2013-07-29 30 views
6

Tôi có những gì tôi nghĩ là một vấn đề khá đơn giản.Đăng ký lại dịch vụ JMDNS

Tôi đang cố gắng sử dụng JmDNS để phát sóng dịch vụ mà tôi đã quản lý thành công, tuy nhiên khi ứng dụng bị tạm dừng, tôi muốn hủy đăng ký dịch vụ và sau đó tiếp tục ứng dụng, đăng ký lại dịch vụ.

Tuy nhiên, tôi đang gặp sự cố khi thực hiện việc này. Mã này là dưới đây:

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

Khi tôi cố gắng này tôi nhận được log này lỗi mà là khó hiểu với tôi:

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) 

Ai đó có thể giải thích cho tôi những gì tôi đang làm sai hoặc một cách tiếp cận khác. Các chuỗi mà tôi áp dụng cho việc tạo dịch vụ chắc chắn là hợp lệ vì chúng được sử dụng để đăng ký dịch vụ trước đó trong ứng dụng.

Trả lời

5

Tôi cũng gặp vấn đề tương tự. Hóa ra ServiceInfo.create() không cho bạn biết rõ ràng khi loại sự kiện của bạn không hợp lệ. Trong trường hợp của tôi, tôi đã gửi "_http._tcp." làm loại sự kiện. Tôi đã thay đổi loại sự kiện của mình thành "_http._tcp.local" và mọi thứ hoạt động hoàn hảo. Hy vọng rằng sẽ giúp.

+0

Nếu bạn sử dụng loại sự kiện/Loại dịch vụ là "_http._tcp.local", bạn có thể nhận tất cả các dịch vụ chính xác không? – sandeepmaaram

Các vấn đề liên quan