2012-12-21 34 views
5

我有2個UDP響應目標IP,一個正確的前一後:的Python 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()實例上執行if語句,以確保代碼在確認發送前不會繼續執行?

而且,我應該關閉sendsock?

+0

感謝列夫。你如何應用語法高亮到python?否則,只是手動放在一個'< - – coffeemonitor

+0

@lev添加的主要'python'標記您的Q,所以它會突出使用(Python的2.X的Python 3.X等...標籤不這樣做) ! - 語言:郎蟒蛇 - >'的代碼塊之前(或只是在你的崗位的頂部,使之成爲默認) –

+0

更清晰的感謝喬恩。 – coffeemonitor

回答

1

沒有與UDP不能保證該信息會同步到達,或者他們甚至會在所有的到達,所以它實際上從未承認爲發送,除非你發應答響應從接收節目回來。這是提高UDP與TCP速度的折衷。

但是,您可以在while循環中檢查sendto(發送的字節數)的返回值,並且不會退出while循環,直到發送的字節匹配原始消息的字節或達到超時值。

而且,它可能是更容易使用socketserver module簡化處理您的插座的過程。