sockets सबस किसी भी उपलब्ध बंदरगाह से कैसे बांधें?




मुंबई बंदरगाह (3)

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

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

क्या किसी भी बंदरगाह पर यूडीपी सॉकेट बांधने का कोई तरीका है? आईएमओ इसे मुफ्त पोर्ट # को तुरंत प्राप्त करने का एक प्रभावी तरीका होना चाहिए, जिसका उपयोग स्वीकृति () फ़ंक्शन द्वारा किया जाता है।

यदि नहीं, तो WSAEADDRINUSE / EADDRINUSE स्थिति के लिए बाध्यकारी और जांच करने का सर्वोत्तम प्रयास क्या है: अनुक्रमिक रूप से 1025, या 1025 + रैंड (), या किसी अन्य से शुरू होने वाले बंदरगाहों को आज़माएं?


पहले कॉलिंग के बिना कॉल sendto , सॉकेट स्वचालित रूप से बाध्य हो जाएगा (एक मुफ्त बंदरगाह के लिए)।


मुझे कुछ याद आना चाहिए, आप वापस डेटा भेजने के लिए udp सॉकेट का उपयोग क्यों नहीं करते? प्रेषण के साथ शुरू करें और फिर आने वाले डेटा को पढ़ने के लिए रिकॉर्फ़ॉम फ़ंक्शन का उपयोग करें, आपको बोनस के रूप में मिलता है जिस पते से डेटा भेजा गया था, वहां आपके लिए प्रतिक्रिया वापस भेजने के लिए।


एक और विकल्प bind() लिए बंदरगाह 0 निर्दिष्ट करना bind() । यह आपको यादृच्छिक बंदरगाह पर बाध्यकारी होने पर एक विशिष्ट आईपी पते से जुड़ने की अनुमति देगा (यदि आपके पास एकाधिक इंस्टॉल हैं)। यदि आपको पता होना चाहिए कि कौन सा बंदरगाह चुना गया था, तो बाध्यकारी के बाद आप getsockname() उपयोग कर सकते हैं।





networking