2012-02-24 16 views
7

मैं एक बार और सभी के लिए सीखना चाहता हूं। मल्टीकास्ट सॉकेट को जोड़ने की प्रक्रिया क्या है? मुझे पता है कि आपको स्थानीय इंटरफ़ेस से जुड़ना है (क्या आपको इसके लिए आईपी और बंदरगाह चाहिए?) तो मुझे पता है कि आपको एक समूह में शामिल होना है (क्या आपको आईपी की आवश्यकता है: उस पते के लिए पोर्ट जो आप शामिल करना चाहते हैं और नेटवर्क इंटरफ़ेस फिर से! !!??) और फिर अंत में आप समूह छोड़ सकते हैं।क्या मल्टीकास्ट समूह या सिर्फ आईपी में शामिल होने पर मुझे पोर्ट की आवश्यकता है?

अनुभव वाला कोई व्यक्ति स्पष्ट कर सकता है कि उन सभी पते में से क्या है? मैं नीचे सूची जाएगा:

  • BindAddress (आईपी: पोर्ट)
  • NetworkAddress (आईपी: पोर्ट)
  • MulticastAddress (आईपी: पोर्ट)

कहाँ और क्या बहुस्त्र्पीय समूह है यहाँ?

उत्तर

5

एक बहुस्त्र्पीय समूह एक विशेष IP पता है। आप सॉकेट विकल्प IP_ADDMEMBERSHIP का उपयोग करके setsockopt() के माध्यम से इसमें शामिल हों, या उदा। जावा में MulticastSocket.joinGroup() के माध्यम से। यहां कोई पोर्ट नंबर नहीं है। यदि आप किसी विशिष्ट स्थानीय पते के माध्यम से शामिल होना चाहते हैं, तो ओवरलोड का उपयोग करें जो स्थानीय पता निर्दिष्ट करता है, या पहले setNetworkInterface() पर कॉल करें।

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

यह इस तथ्य से उलझन में है कि आप लिनक्स में एक मल्टीकास्ट पते से जुड़ सकते हैं, लेकिन यह एक गलतफहमी प्रतीत होता है जो अब हमेशा हमारे साथ रहेगा।

आप मल्टीकास्ट पते पर भेजकर एक मल्टीकास्ट समूह को भेजते हैं।

+0

धन्यवाद ईजेपी, लेकिन मुझे अभी भी समझ में नहीं आता है। जावा का डेटाग्रामChannelImpl.joinGroup एक सॉकेट एड्रेस (पोर्ट के साथ) लेता है। तो मुझे लगता है कि आप कह रहे हैं कि मल्टीकास्ट पता (आईपी) को मल्टीकास्ट समूह भी कहा जाता है, है ना? मैं उन तीन पतों के मतभेदों और उद्देश्यों को समझना चाहता हूं: मल्टीकास्ट एड्रेस, नेटवर्क एड्रेस और बाइंड एड्रेस। – chrisapotek

+0

@chrisapotek संपादित देखें: क्या इससे कोई स्पष्ट हो जाता है? – EJP

+0

@EJB मैंने इस पूरक के लिए दो अतिरिक्त प्रश्न खोले। मैं वास्तव में इसे समझना चाहता हूं: यहां वे हैं: http://stackoverflow.com/questions/9468991/why-datagramsocketimpl-joingroup-method-takes-a-inetsocketaddress-if-the-port-do और http: // स्टैक ओवरफ़्लो।कॉम/प्रश्न/9469036/क्यों-डेटाग्रामसेटिमप्ल-जोनिंग समूह-विधि-ले-ए-नेटवर्कइंटरफेस-अगर-द-सॉकेट-एम – chrisapotek

0

हां, आपको मल्टीकास्ट संदेशों को भेजने/प्राप्त करने के लिए पता और बंदरगाह दोनों को परिभाषित करना होगा। ये यूडीपी पैकेट हैं, इसलिए उन्हें नेटवर्किंग स्टैक के लिए दोनों पते और बंदरगाह की आवश्यकता होती है ताकि वे भाग लेने वाली प्रक्रियाओं को संदेशों को सही ढंग से वितरित कर सकें। तो मल्टीकास्ट संदेशों के एक विशेष सेट को सुनने के लिए, आपके एप्लिकेशन को किसी विशेष मल्टीकास्ट आईपी पते और पोर्ट संयोजन (और स्पष्ट रूप से मशीन पर सेट या सभी इंटरफेस के लिए) से जुड़ना होगा। समूह को पता/बंदरगाह संयोजन द्वारा परिभाषित किया गया है।

Good quick explanation

Some sample source code in C and other languages

+0

मेरा डाउनवोट नहीं, लेकिन आपने सवाल का जवाब नहीं दिया है। उन्होंने भेजने और प्राप्त करने के बारे में नहीं पूछा, उन्होंने शामिल होने के बारे में पूछा। – EJP

+0

मैं इस कहानी में उन तीनों पते में से प्रत्येक भूमिका (किस उद्देश्य) को समझने के लिए और अधिक देख रहा था। – chrisapotek

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