2012-12-18 29 views
6

"Network Programming Topics Conceptual Guide" का अध्याय "Using Sockets and Streams" में, एप्पल का कहना है:आईओएस पर यूडीपी सॉकेट के प्रबंधन के लिए मैं किस उच्च स्तरीय एपीआई का उपयोग करूंगा?

नोट: POSIX नेटवर्किंग iOS पर सेलुलर रेडियो को सक्रिय नहीं करता है। इस कारण से, POSIX नेटवर्किंग API आमतौर पर आईओएस में निराश होती है।

इसके अलावा "Networking Overview Guide" का अध्याय "Networking Tips and Pitfalls" में, एप्पल का कहना है:

आईओएस में, सीधे POSIX कार्यों का उपयोग कर या CFSocket स्वचालित रूप से डिवाइस के सेलुलर मॉडेम को सक्रिय नहीं करता है या पर सॉकेट का उपयोग कर -डेमांड वीपीएन।

ठीक है, तो आईओएस एक पर न POSIX सॉकेट और न ही CFSocket, जो POSIX सॉकेट चारों ओर एक पतली आवरण जो RunLoops के माध्यम से अतुल्यकालिक नेटवर्किंग का समर्थन करता है का उपयोग करना चाहिए। कोई बात नहीं। लेकिन अगर आपको यूडीपी सॉकेट की आवश्यकता है, तो आपको किस एपीआई का उपयोग करना चाहिए?

इसके अलावा एप्पल में कहते हैं अध्याय "Networking Tips and Pitfalls" "Networking Overview Guide" की:

बचें हल DNS नाम एक होस्ट से कनेक्ट करने से पहले

तो आदर्श वहाँ के प्रबंधन के लिए एक API होना चाहिए यूडीपी सॉकेट, POSIX API और CFSocket के अलावा, जो गंतव्य पते के लिए आईपी पते के बजाय DNS नाम स्वीकार करता है।

शायद मैं अंधा हूं लेकिन मैं ऐसा कोई एपीआई नहीं ढूंढ पा रहा हूं। कोई विचार?

किसी भी तृतीय पक्ष API (ऐप्पल से नहीं) का उपयोग करना दिलचस्प नहीं है, क्योंकि इस तरह के एपीआई को या तो ऐप्पल एपीआई पर आधार होना चाहिए और उस स्थिति में मैं सीधे इस ऐप्पल एपीआई का उपयोग कर सकता हूं। POSIX सॉकेट के आस-पास अपना स्वयं का रैपर एपीआई लिखना केक का टुकड़ा है, मैंने पहले इतने सारे सॉकेट रैपर लिखे हैं, मुझे पहले से ही सभी ग़लत नुकसान पता है। फिर भी मैं POSIX API का उपयोग नहीं करूंगा, जो यहां प्रारंभिक समस्या है।

उत्तर

0

ऐप्पल में एक नमूना कोड है जो यूडीपी का उपयोग करने का वर्णन करता है। अपने आप इसे करने की कोशिश नहीं की है, लेकिन यह आप कुछ अच्छे संकेत देना चाहिए:

https://developer.apple.com/library/mac/#samplecode/UDPEcho/Introduction/Intro.html

+0

यह कोड आईओएस के लिए नहीं है, यह मैकोज़ 10.7 या उच्चतम कहता है। निश्चित रूप से, यह कोड आईओएस पर काम करेगा लेकिन यह सीएफएसओकेट का उपयोग करता है और ऐप्पल का कहना है कि आप आईओएस पर सीएफएसओकेट का उपयोग नहीं करेंगे। – Mecki

1

मैं एप्पल बिल्कुल वैसा ही प्रश्न पूछा और उनके जवाब नहीं यूडीपी के लिए किसी भी उच्च स्तर इंटरफ़ेस नहीं है और अधिक या कम है कि है सॉकेट। यूपीपी का उपयोग करते समय ऐप्पल अपने गाइड में क्या कहता है, भले ही poll() या select() जैसे एसिंक मैनेजर के साथ संयोजन में सीधे पॉज़िक्स सॉकेट का उपयोग करें, या एक पॉज़िक्स सॉकेट बनाएं (शायद bind() और/या connect() आवश्यकतानुसार) और फिर RunLoop एकीकरण प्राप्त करने के लिए इसे CFSocketCreateWithNative() का उपयोग करके CFSocket ऑब्जेक्ट में लपेटें। यह सबसे अच्छा एपीआई है जो मौजूद है। सभी उच्च स्तरीय एपीआई केवल टीसीपी के साथ इस्तेमाल करने के लिए डिज़ाइन किए गए हैं।

+0

क्या आपने कभी पॉज़िक्स सॉकेट के लिए सेलुलर रेडियो को कम से कम सक्रिय करने का कोई तरीका खोजा है? मैं इसे पूरा करने के लिए एप्लिकेशन लॉन्च समय पर एक http अनुरोध कर रहा हूं, लेकिन अब मुझे एहसास है कि ऐसे मामले हैं जहां सेलुलर कनेक्शन को मजबूर करने की आवश्यकता हो सकती है क्योंकि फ़ायरवॉल यूडीपी को अवरुद्ध कर रहा है। – user1055568

0

एक ही चीज़ का प्रयास कर रहा था और हालांकि दस्तावेज़ कहते हैं कि निचले स्तर के एपीआई सेलुलर रेडियो और ऑन-डिमांड वीपीएन को सक्रिय नहीं करेंगे, यह टीसीपी कनेक्शन के लिए पूरी तरह से सच नहीं है।

यूडीपी के मामले में, यह सच है और आपके यूडीपी पैकेट ज्यादातर समय नहीं भेजे जाते हैं। इसे हल करने के लिए, निचले स्तर के एपीआई का उपयोग करके टीसीपी के लिए सिर्फ एक सुनवाई सॉकेट खोलें और यह सेलुलर रेडियो या ऑन-डिमांड वीपीएन को सक्रिय करेगा और आपके द्वारा किए जाने के बाद सॉकेट को बंद कर देगा।

टीसीपी के लिए, आप आईओएस उपकरणों पर सर्वर साइड कोड के लिए निम्न-स्तरीय एपीआई का उपयोग कर सकते हैं और यह सेलुलर रेडियो या ऑन-डिमांड वीपीएन को सक्रिय करता है लेकिन आईओएस उपकरणों पर क्लाइंट साइड कोड के लिए, उच्च स्तर का उपयोग करना बेहतर है प्रदान किए गए एपीआई। किसी भी तरह से, रेडियो सक्रिय है और आपको भेजे जा रहे पैकेट के बारे में चिंता करने की ज़रूरत नहीं है।

बीटीडब्ल्यू, यही वह है जो मैं वर्तमान में कर रहा हूं।

+0

मैंने कोशिश की। रेडियो कुछ सेकंड के बाद मर जाता है। – Mahouk

+0

वास्तव में? यह मेरे लिए काम किया। क्या होता है जब रेडियो मरने के बाद सुनवाई सॉकेट से कनेक्ट करने का प्रयास करता है? – Shehzan

+0

मेरे पास परीक्षण करने के लिए दूसरा डिवाइस नहीं था। क्या आप साझा कर सकते हैं कि आपने अपना टीसीपी सॉकेट कैसे खोला? मैंने मानक पॉज़िक्स टीसीपी सॉकेट का उपयोग करके इसे आजमाया। – Mahouk