[英]UDP Connect Cause Socket To Lose Packets?
我正在调试python程序,应用程序无法按预期接收udp数据包。 最终我发现是UdpSocket.connect导致UdpSocket丢失了这些数据包。 请参阅以下代码:
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只是无法恢复。 我希望有人帮助解释为什么sock.recv不会每次都返回。
您没有提及您希望接收(但无法接收)的数据包来自何处。 我猜他们不是来自您连接的地址。 请参阅connect(2)
的手册页,这是使用此Python API时要调用的内容,以获取有关为何如此重要的信息。 尤其是:
如果套接字sockfd的类型为SOCK_DGRAM,则addr是默认情况下向其发送数据报的地址,并且是唯一从其接收数据报的地址 。
(强调我的)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.