2011-10-03 14 views
8

मुझे एक आईफोन से यूडीपी प्रसारण भेजने की ज़रूरत है, और फिर टाइमआउट अवधि के साथ यूडीपी प्रतिक्रिया सुनना होगा। मुझे ऐप्पल का UDPEcho example मिला है, लेकिन मुझे यकीन नहीं है कि मुझे इसकी आवश्यकता है या नहीं। भेजने के लिए this example भी मिला लेकिन प्राप्त नहीं हुआ।आईफोन यूडीपी प्रसारण और प्रतिक्रिया

//send the broadcast 
SendUDP("255.255.255.255", targetPort, myData); 
//A blocking call to get the data. Timeout value will be short, 2 seconds at most 
//An asynchronous option is ok, if it's necessary. 
Response = GetFirstUDPResponse(receptionPort, timeoutValue); 

//process the response 
if(Response == null) 
    //we timed out 
else 
    //process response 

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

उत्तर

5

आप cocoaAsyncSocket का उपयोग कर सकते हैं जो सेब के मूल वर्गों से उपयोग करना आसान है।
यह AsyncUdpSocket क्लास के साथ यूडीपी का समर्थन करता है।

AsyncUdpSocket एक यूडीपी/आईपी सॉकेट नेटवर्किंग पुस्तकालय कि CFSocket लपेटता है। यह लगभग टीसीपी संस्करण की तरह काम करता है, लेकिन विशेष रूप से यूडीपी के लिए डिज़ाइन किया गया है। यह पंक्तिबद्ध शामिल गैर-अवरुद्ध भेजने/प्राप्त संचालन, पूर्ण प्रतिनिधि समर्थन, चलाने लूप आधारित, आत्म निहित वर्ग, और IPv4 और IPv6

+0

धन्यवाद, यह आसान था। मैंने यहां अपना अधिकांश कोड यहां प्रदान किया है: http://stackoverflow.com/questions/5790149/little-problem-with-asyncudpsocket-receiving-data-after-connecting-to-broadcast-i/7682688#7682688 – Alex

5

मैं का उपयोग कर एक और धागा पर 'recvfrom' रखा था के लिए समर्थन ग्रैंड सेंट्रल प्रेषण, इस तरह:

// Use grand central dispatch so we don't block the interface 
dispatch_async(dispatch_get_global_queue(0, 0), ^{ 

    recvfrom(...) // Receive with a 2s timeout 

    dispatch_async(dispatch_get_main_queue(), ^{ // The main thread stuff goes here 

     if (received ok) { 
      [self receivedData:some data]; 
     } else { 
      [self timedOut]; 
     } 

    }); 
}); 
+1

हालांकि एक बात, आप ब्रॉडकास्ट पैकेट भेजने से पहले यह सुनिश्चित करना चाहते हैं कि आप सुन रहे हैं (यानी रिकॉर्फ़ोम), अन्यथा भेजने और सुनने के बीच छोटे समय के अंतर में प्रतिक्रिया वापस आ सकती है। हालांकि, ऐसा करने के लिए, आपको पहले अपने क्षणिक बंदरगाह को बांधना होगा। – Chris

+0

मैं 2s टाइमआउट भाग के साथ प्राप्त करने के बारे में उत्सुक हूं। आप इसे कैसे कार्यान्वित करते हैं? – chancyWu

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