7

खोलने के बाद अधिक समय लगता है मैं नेटवर्क पर सेवाओं का पता चलने के लिए निम्न कोड:NSNetServiceBrowser didRemoveService धारा

[netServiceBrowser setDelegate: self]; 
[netServiceBrowser searchForServicesOfType: serviceType inDomain: domain]; 

कि इन दोनों तरीकों के लिए कॉल में परिणाम (सेवा खोजने के लिए और सेवा निकालने के लिए):

- (void) netServiceBrowser:(NSNetServiceBrowser*) netServiceBrowser 
     didFindService:(NSNetService*) netService ... {} 

- (void) netServiceBrowser:(NSNetServiceBrowser*) netServiceBrowser 
     didRemoveService:(NSNetService*) netService ... {} 

यह ठीक काम करता है। जब मैं अपना डिवाइस बंद करता हूं I तत्कालdidRemoveService कॉल प्राप्त करें।

लेकिन जब मैं एक धारा डिवाइस के लिए (इनपुट, आउटपुट या दोनों) को खोलने:

[netService getInputStream: &inputStream outputStream: &outputStream]; 

[inputStream setDelegate: self]; 
[outputStream setDelegate: self]; 

[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] 
      forMode: NSDefaultRunLoopMode]; 
[inputStream open]; 

[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] 
       forMode:NSDefaultRunLoopMode]; 
[outputStream open]; 

यह अचानक NSNetServiceBrowser लगभग एक मिनट का पता लगाने के लिए कि मैं उपकरण बंद लेता है
(यह लेता है एक के लिए मिनट किया गया था RRove सेवा कहा जाता है)।

जिन उपकरणों के साथ मैं संचार नहीं कर रहा हूं (जिनके साथ स्ट्रीम खोल रहा है) अभी भी didRemoveService पर कॉल करते हैं जैसे ही मैं उन्हें हटा देता हूं।

अद्यतन: यहां मेरी समस्या से संबंधित कुछ और जानकारी है।

मैं Wireshark के साथ एक ट्रेस भाग गया और चला है कि निम्न है:

मैं iPad सिम्युलेटर में अपने आवेदन शुरू करते हैं, आवेदन एक NSNetServiceBrowser शुरू होता है और प्रिंटर का पता लगाता है। उसके बाद यह डिवाइस/इनपुट (आउटपुट एक्सप्रेस, यूएसबी के माध्यम से) इनपुट/आउटपुट स्ट्रीम खोलता है। प्रिंटर मुझे स्थिति अपडेट भेज रहा है और जब मैं में परीक्षण बटन टैप करता हूं तो मेरा ऐप प्रिंटर प्रिंटिंग शुरू करता है। Wireshark में मैं प्रिंटर के साथ अपेक्षित सभी संचार देखता हूं।

अब जब मैं आईपैड पर एक ही एप्लीकेशन शुरू करता हूं (और आईपैड सिम्युलेटर चल रहा है)। एप्लिकेशन NSNetServiceBrowser भी शुरू करता है, और प्रिंटर का पता लगाता है। प्रिंटर मुझे स्थिति अपडेट नहीं भेज रहा है और जब मैं परीक्षण बटन टैप करता हूं, प्रिंटर प्रिंट नहीं कर रहा है। वायर्सहार्क में मैं संचार देखता हूं। प्रिंटर या हवाई अड्डे मेरे आदेश प्राप्त करता है और एक एसीके पैकेज भेजता है।

जैसे ही मैं आईपैड सिम्युलेटर ऐप को मारता हूं, प्रिंटर को आईपैड का उपयोग करके भेजे गए आदेशों को प्रिंट करना शुरू कर देता है। ऐसा लगता है कि एक सॉकेट खोलने से सभी घटनाएं सामने आती हैं, मैं इसे कैसे होने से रोक सकता हूं?

अधिक यहाँ: https://devforums.apple.com/message/541436

+0

जैसे ही मैं धाराओं को बंद करता हूं, didRemoveService आग लगती है। ऐसा लगता है कि किसी प्रकार का टाइमआउट इंतजार कर रहा है? – Zyphrax

+0

मुझे यकीन नहीं है कि यह मामला है, लेकिन अपनी - (शून्य) स्ट्रीम पर नज़र डालें: (एनएसएसटीम *) एस्ट्रीम हैंडलएवेंट: (एनएसएसटी्रीमइवेंट) इवेंट हैंडलर। शेर में हैंडलर को NSStreamEventEndEncountered ईवेंट के लिए और भी नहीं कहा जाता है। इसलिए, आपको अपने इनपुट स्ट्रीम को बंद करने और लूप से इसे हटाने की आवश्यकता है जब आप सुनिश्चित करते हैं कि आपको सभी डेटा प्राप्त हुआ है। उदाहरण के लिए जब NSStreamEventHasBytes उपलब्ध होता है। – Davyd

+0

ऐप्पल डेवलपर फ़ोरम तक पहुंच वाले लोगों के लिए। मैंने अपनी समस्या यहां पोस्ट की है: https://devforums.apple.com/message/541436। दुर्भाग्य से अभी भी कोई समाधान नहीं :( – Zyphrax

उत्तर

0

काम करना चाहिए यह हवाईअड्डा एक्सप्रेस की सीमा है।

जीसीडीएसिंक सॉकेट के साथ मेरा वर्तमान कार्यान्वयन बहुत अच्छा काम करता है और मुझे बस यह सुनिश्चित करना होगा कि हवाई अड्डे एक्सप्रेस के साथ संवाद करने के लिए केवल एक सॉकेट का उपयोग किया जाए।

मैं सवाल बंद कर रहा हूं।

0

मुझे यकीन है कि अपने में शेर हैंडलर NSStreamEventEndEncountered किसी भी अधिक घटना के लिए नहीं बुलाया जाता है कर रहा हूँ। इसलिए, आपको अपने इनपुट स्ट्रीम को बंद करने और लूप से इसे हटाने की आवश्यकता है जब आप सुनिश्चित करते हैं कि आपको सभी डेटा प्राप्त हुआ है। उदाहरण के लिए जब NSStreamEventHasBytes उपलब्ध होता है। इसे देखें और मुझे लगता है कि यह

+0

दुर्भाग्यवश मुझे अपने इनपुट स्ट्रीम को डिवाइस अपडेट (पेपर, ट्रे ओपन इत्यादि से बाहर प्रिंटर) के लिए खोलना है। यह समस्या हिम तेंदुए, आईओएस पर होती है, शेर वास्तव में कोई फर्क नहीं पड़ता। – Zyphrax

संबंधित मुद्दे