पर यूडीपी प्रसारण पैकेट प्राप्त करना हमारे पास मौजूदा सॉफ़्टवेयर है जो समय-समय पर स्थानीय सबनेट (x.x.x.255) पर एक विशिष्ट पोर्ट (7125) पर यूडीपी पैकेट को प्रसारित करता है। हमारे पास एचपी-यूएक्स (11.11) पर चल रहे सॉफ़्टवेयर की निगरानी है जो इन पैकेट को कोई समस्या नहीं प्राप्त करने में सक्षम है। हालांकि, निगरानी सॉफ्टवेयर को लिनक्स (आरएचईएल 6.1) में पोर्ट करने के बाद हमने पाया है कि इसे प्रसारण पैकेट नहीं मिलते हैं। tcpdump लिनक्स होस्ट पर आने वाले पैकेट दिखाता है, लेकिन कर्नेल उन्हें हमारे सॉफ़्टवेयर के माध्यम से नहीं भेजता है।लिनक्स
मैं कुछ पाइथन 2.x स्क्रिप्ट का उपयोग कर रहा हूं जो सॉकेट एपीआई की नकल करते हैं मॉनीटरिंग सॉफ़्टवेयर विभिन्न परिदृश्यों का परीक्षण करने के लिए उपयोग करता है। लिनक्स कर्नेल रिसीवर सॉफ़्टवेयर में पैकेट पास करता है यदि प्रेषक यूनिकास्ट (10.1.0.5) का उपयोग करता है, लेकिन प्रसारण नहीं करता (10.1.0.255)। मैं कई दिनों से वेब खोज रहा हूं और किसी को भी एक ही समस्या के साथ नहीं मिला है। कोई विचार?
receiver.py
from __future__ import print_function
import socket
localHost = ''
localPort = 7125
remoteHost = '10.1.0.5'
remotePort = 19100
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
s.bind((localHost, localPort))
s.connect((remoteHost, remotePort))
print('Listening on {0}:{1} for traffic from {2}:{3}'.format(localHost, localPort, remoteHost, remotePort))
data = s.recv(1024)
print('Received: {0}'.format(data))
s.close()
sender.py
from __future__ import print_function
import socket
import time
localHost = ''
localPort = 19100
remoteHost = '10.1.0.255'
remotePort = 7125
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
s.bind((localHost, localPort))
s.connect((remoteHost, remotePort))
data = 'sending this from {0}:{1} to {2}:{3}'.format(localHost, localPort, remoteHost, remotePort)
print(data)
print('2')
time.sleep(1)
print('1')
time.sleep(1)
s.send(data)
print('sent at {0}'.format(time.ctime()))
s.close()
क्या आपके रिसीवर को प्रसारण पते या 'INADDR_BROADCAST' (255.255.255.255, प्रसारण के' INADDR_ANY') को 'बाध्य' करने की आवश्यकता नहीं है? यही है, 'SO_BROADCAST' विकल्प (दोनों तरफ) को सेट करने के अलावा, जैसा कि आप पहले से कर रहे हैं। क्या आप इन सभी सॉकेट सिस्टम कॉल के त्रुटि/वापसी कोड की जांच कर रहे हैं? –
@ मैथ्यूहॉल आह, प्रसारण पते पर बाध्यकारी काम करता है! मुझे लगता है कि इसका मतलब है कि लिनक्स आपको यूनिकास्ट और प्रसारण के बीच चुनता है? हम 'INADDR_ANY' से जुड़ने और एचपी-यूएक्स पर यूनिकास्ट और प्रसारण पैकेट दोनों प्राप्त करने में सक्षम हैं। – goose
हां, ऐसा लगता है कि आपको चुनना है। मैंने अब आपके प्रश्न का एक कैननिकल जवाब पोस्ट कर दिया है। हालांकि, मैं कुछ हद तक परेशान हूं कि एचपी-यूएक्स से लिनक्स पर व्यवहार अलग क्यों है (हालांकि इस बात के तर्क हैं कि क्यों प्रसारण और यूनिकास्ट को अलग करना बेहतर होगा)। मेरे लिए, यह बताता है कि हम सबकुछ नहीं जानते हैं, और अच्छी तरह से, यह सामान्य रूप से अस्वीकार्य है। मैं लिनक्स पर प्रसारण विकल्पों को पूरी तरह से निकालने के लिए सी में दो टेस्ट प्रोग्राम लिखने का लुत्फ उठा रहा हूं, हालांकि मेरे पास कोई एचपी-यूएक्स नहीं है ... तब तक, उम्मीद है कि मेरा जवाब इसे कवर करेगा। –