अन्य उत्तर समस्या का समाधान हो सकता है, लेकिन वहाँ एक "अधिक मुड़" है एकाधिक इंटरफेस पर एक मल्टीकास्ट समूह को सुनने का तरीका।
एक या अधिक इंटरफेस
पर एक बहुस्त्र्पीय समूह को सुनना, एक या अधिक इंटरफेस पर एक बहुस्त्र्पीय समूह को सुनने के प्रोटोकॉल के transport.joinGroup को कई कॉल में प्रत्येक वांछित इंटरफेस के आईपी प्रदान करने के लिए() 'इंटरफ़ेस' तर्क के रूप में विधि।
नीचे एक उदाहरण है जो मेरे लिनक्स बॉक्स पर काम करता है, और आपके सिस्टम को विशिष्ट इंटरफेस पर मल्टीकास्ट्स को सुन देगा। आईपी पते को अपने सिस्टम से संबंधित लोगों के साथ बदलें।
#!/usr/bin/env python
from twisted.internet import protocol
from twisted.internet import reactor
class MyProtocol(protocol.DatagramProtocol):
def startProtocol(self):
# Join a multicast group, 224.0.0.9, on the interface belonging
# to each of these IPs.
# XXX Replace the interface_ips with one or more IP addresses belonging
# to your system.
for interface_ip in ["192.168.2.2", "10.99.1.100"]:
self.transport.joinGroup("224.0.0.9", interface_ip)
if __name__ == "__main__":
reactor.listenMulticast(1520, MyProtocol())
reactor.run()
आप देख सकते हैं कि इंटरफ़ेस /sbin/ip maddr show
आदेश का उपयोग कर नए बहुस्त्र्पीय समूह के लिए सुन रहा है। आदेश आउटपुट में वांछित इंटरफ़ेस नाम खोजें, और सत्यापित करें कि मल्टीकास्ट समूह इसके नीचे दिखाई देता है।
मूल पोस्ट में लिंक किया गया यूडीपी सर्वर उदाहरण उपरोक्त के रूप में दूसरा आईपी पता तर्क शामिल करने के लिए समूह समूह() में कॉल को बदलकर एक ही चीज़ करने में सक्षम होना चाहिए। कई इंटरफेस से बाहर संभवतः -
किसी विशेष IP
से multicasts भेजा जा रहा है आप एक सॉकेट पर बहुस्त्र्पीय डेटा मिल रहा है तो संभावना है कि आप भी बहुस्त्र्पीय डेटा भेजने के लिए चाहते हैं कर रहे हैं। चूंकि यह निकटता से संबंधित है और इसके आसपास बहुत कम उदाहरण हैं, मैं इसे यहां फेंक दूंगा। Twisted.internet.protocol.DatagramProtocol ऑब्जेक्ट के अंदर आप self.transport.setOutgoingInterface() विधि का उपयोग स्रोत आईपी को नियंत्रित करने के लिए कर सकते हैं जिसका उपयोग बाद के कॉल के लिए self.transport.write() पर किया जाएगा।उदाहरण एकाधिक आईपी/इंटरफेस से संदेश भेजना दिखा रहा है:
class MyProtocol(protocol.DatagramProtocol):
# ...
def send_stuff(self, msg):
for src_ip in ["10.0.0.1", "192.168.1.1"]:
self.transport.setOutgoingInterface(src_ip)
self.transport.write(msg, ("224.0.0.9", 1520))
मान लीजिए कि इन आईपी को दो अलग-अलग इंटरफेस सौंपा गया था। वायर्सहार्क के साथ घूमते हुए आप पहले इंटरफेस से भेजे गए संदेश को देखेंगे, फिर दूसरा इंटरफ़ेस, प्रत्येक आईपी का उपयोग संबंधित ट्रांसमिशन के लिए स्रोत आईपी पते के रूप में करेगा।
और केवल निर्दिष्ट मल्टीकास्ट समूह के लिए बाध्यकारी के रूप में, आपको 'listenMulticast() 'के तीसरे तर्क के रूप में पास करना चाहिए। –