2012-12-21 8 views
5

मैं एक गंतव्य आईपी के लिए 2 UDP प्रतिसादों है, एक सही एक के बाद:अजगर 3 - की पुष्टि sendto() सफलता

sendsock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) 
sendsock.bind(('%s' % ip_adr, 1036)) 

#send first packet 
ok_response = "Reception Success, more to come" 
str2bytes = bytes(ok_response,'utf-8') 
sendsock.sendto(str2bytes, ("%s" % phone.ip_addr, int(phone.sip_port))) 

#send second packet 
ok_response = "Fun data here" 
str2bytes = bytes(ok_response,'utf-8') 
sendsock.sendto(str2bytes, ("%s" % phone.ip_addr, int(phone.sip_port))) 

मैं Wireshark दूसरा पैकेट भेजा जाता है के साथ देख सकते हैं। लेकिन पहले को नजरअंदाज कर दिया जाता है।

जब तक कोई मेरे कोड में हिचकी नहीं देख सकता है, तो प्रत्येक sendsock.sendto() उदाहरण पर कोई कथन कथन करने का कोई तरीका है, यह सुनिश्चित करने के लिए कि कोड जारी नहीं होने तक जारी नहीं रहता है?

साथ ही, क्या मुझे सेंडॉक बंद करना चाहिए?

+0

धन्यवाद लेव। आप पाइथन पर हाइलाइटिंग सिंटैक्स कैसे लागू करते हैं? – coffeemonitor

+0

@lev ने आपके क्यू में मुख्य 'पायथन' टैग जोड़ा, इसलिए यह उस (पायथन 2.x पायथन 3.x आदि का उपयोग करके हाइलाइट करेगा ... टैग ऐसा नहीं करते हैं) - अन्यथा, मैन्युअल रूप से '< ! - भाषा: लैंग-पायथन -> कोड ब्लॉक से पहले (या सिर्फ अपनी पोस्ट के शीर्ष पर इसे डिफ़ॉल्ट बनाने के लिए) –

+0

बहुत स्पष्ट धन्यवाद जॉन। – coffeemonitor

उत्तर

1

यूडीपी के साथ कोई गारंटी नहीं है कि संदेश सिंक्रनाइज़ हो जाएंगे या वे सभी भी पहुंचेंगे, इसलिए जब तक आप रिसीवर प्रोग्राम से एक पावती प्रतिक्रिया वापस नहीं भेजते हैं, तब तक इसे वास्तव में तब तक स्वीकार नहीं किया जाता है जब तक आप रिसीवर प्रोग्राम से एक पावती प्रतिक्रिया नहीं भेजते। यह ट्रेडऑफ है जो यूसीपी बनाम टीसीपी की गति में सुधार करता है।

हालांकि, आप थोड़ी देर में sendto (भेजे गए बाइट्स की संख्या) के वापसी मूल्य की जांच कर सकते हैं और जब तक भेजे गए बाइट्स मूल संदेश के बाइट से मेल नहीं खाते हैं या टाइमआउट मान तक पहुंच जाते हैं, तब तक लूप से बाहर नहीं निकलते हैं।

साथ ही, अपने सॉकेट को संभालने की प्रक्रिया को सरल बनाने के लिए socketserver module का उपयोग करना आसान हो सकता है।

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