प्राप्त करने में असफल रहा मुझे कुछ के साथ समस्या है और मुझे लगता है कि यह कोड है।पायथन यूडीपी सॉकेट अर्ध-यादृच्छिक रूप से
एप्लिकेशन का उपयोग कुछ कस्टम किए गए नेटवर्क उपकरणों को 'पिंग' करने के लिए किया जाता है ताकि यह जांच सके कि वे जीवित हैं या नहीं। यह उन्हें एक विशेष यूडीपी पैकेट के साथ हर 20 सेकंड में पिंग करता है और प्रतिक्रिया की अपेक्षा करता है। अगर वे लगातार 3 पिंग्स का जवाब देने में असफल होते हैं तो एप्लिकेशन कर्मचारियों को चेतावनी संदेश भेजता है।
एप्लिकेशन 24/7 चल रहा है और दिन में यादृच्छिक संख्या (2-5 अधिकतर) के लिए एप्लिकेशन 10 मिनट के सटीक समय के लिए यूडीपी पैकेट प्राप्त करने में विफल रहता है, जिसके बाद सब कुछ सामान्य हो जाता है। उन 10 मिनट के दौरान केवल 1 डिवाइस का जवाब देने लगता है, अन्य लोग मरते हैं। कि मैं लॉग से कटौती करने में सक्षम हूं।
मैं wireshark का उपयोग किया है पैकेट सूंघ करने के लिए और मैं सत्यापित किया है कि पिंग पैकेट जा रहे हैं दोनों बाहर और में,, ओएस के लिए सभी तरह से तो नेटवर्क हिस्सा ठीक काम कर रहा है। कंप्यूटर WinXPPro चला रहे हैं और कुछ को फ़ायरवॉल कॉन्फ़िगर नहीं किया गया है। मुझे यह समस्या विभिन्न कंप्यूटरों, विभिन्न विंडोज़ इंस्टॉल और विभिन्न नेटवर्क पर है।
मुझे वास्तव में नुकसान हो रहा है कि यहां समस्या क्या हो सकती है।
मैं कोड के प्रासंगिक भाग को जोड़ रहा हूं जो सभी नेटवर्क करता है। यह शेष आवेदन से अलग धागे में चलाया जाता है।
मैं जो भी अंतर्दृष्टि प्रदान कर सकता हूं, उसके लिए मैं आपको अग्रिम धन्यवाद देता हूं।
def monitor(self):
checkTimer = time()
while self.running:
read, write, error = select.select([self.commSocket],[self.commSocket],[],0)
if self.commSocket in read:
try:
data, addr = self.commSocket.recvfrom(1024)
self.processInput(data, addr)
except:
pass
if time() - checkTimer > 20: # every 20 seconds
checkTimer = time()
if self.commSocket in write:
for rtc in self.rtcList:
try:
addr = (rtc, 7) # port 7 is the echo port
self.commSocket.sendto('ping',addr)
if not self.rtcCheckins[rtc][0]: # if last check was a failure
self.rtcCheckins[rtc][1] += 1 # incr failure count
self.rtcCheckins[rtc][0] = False # setting last check to failure
except:
pass
for rtc in self.rtcList:
if self.rtcCheckins[rtc][1] > 2: # didn't answer for a whole minute
self.rtcCheckins[rtc][1] = 0
self.sendError(rtc)
मत भूलना कि यूडीपी विश्वसनीय trasmission की गारंटी नहीं देता: http://en.wikipedia.org/wiki/User_Datagram_Protocol –
मुझे लगता है कि के बारे में पता है, लेकिन पुराने सिस्टम यहां 15 साल या ऐसा करने के लिए यूडीपी उपयोग कर रहा है काफी मज़बूती से और बाकी के सिस्टम में ऐसे कोई मुद्दे नहीं हैं। – flowInTheDark