我正在調試一個python程序,應用程序無法按預期接收udp數據包。最後我發現它是UdpSocket.connect導致UdpSocket丟失這些數據包。看下面的代碼:UDP連接導致套接字丟失數據包?
def main:
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.connect((server_ip, 9)) #This results in the issue
#Use sock.bind((local_ip, 12345))
#instead would solve the problem
localip, localport = sock.getsockname()
packet = GetRegisterData(localip, localport)
sock.sendto(packet, (server_ip, 5000)) #the host (server_ip, 5000) will
#always send back two udp packets
#to respond this statement
sleep(1)
while True:
response = sock.recv(1024) #packets from (server_ip, 5000) reached
#machine but this statement never return
if not len(response)
break
print response
我對Python很新,不明白爲什麼會發生這種情況。任何機構都可以解釋這一點
[更新]
我使用tcpdump的捕獲數據包,才發現丟失的數據包都達到了機器,但由於未知的原因,sock.recv少了點retuern。我希望有人能夠幫助解釋爲什麼sock.recv每次在這裏都不會返回。
UDP連接丟失數據包很常見 – 2014-11-09 00:31:35
@freeforalltousez數據包已到達機器,但是socket.recv不返回。 – Steve 2014-11-09 05:48:40