繁体   English   中英

UDP连接导致套接字丢失数据包?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM