我正在调试一个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