Неопределенный пакет UDP для Windows 10

#python #package #udp #drop

#питон #пакет #udp #капля

Вопрос:

Я пытаюсь прочитать данные платы Fpga радарного датчика по UDP. Не удалось изменить датчик и сетевой протокол. Сеть состоит только из моего компьютера и платы Fpga. Дата отправляется в кадрах. Время между каждым кадром составляет 120 мс, и каждый кадр разделен примерно на 1456 байтовых пакетов. Чтобы прочитать дату каждого кадра, я изменил скрипт Python 3.9, который считывает все 1456 байтовых пакетов и возвращает массив NumPy полного кадра. Когда я запускаю эту программу на своем ноутбуке с Windows 11, она работает идеально и не сбрасывает никаких пакетов udp. Когда я запускаю свой скрипт на ПК с Windows 10, программа теряет пакеты udp. Я попробовал это на 2 разных нотбуках и 1 настольном ПК. На каждом из этих компьютеров обнаруживается одна и та же проблема-потеря пакетов udp. Как я могу оптимизировать свою программу таким образом, чтобы она работала под управлением Windows 10?

Код на Python:

 enter code here  def __init__(self, static_ip='192.168.33.30', adc_ip='192.168.33.180',  data_port=4098, config_port=4096):  # Save network data  # self.static_ip = static_ip  # self.adc_ip = adc_ip  # self.data_port = data_port  # self.config_port = config_port   # Create configuration and data destinations  self.cfg_dest = (adc_ip, config_port)  self.cfg_recv = (static_ip, config_port)  self.data_recv = (static_ip, data_port)   # Create sockets  self.config_socket = socket.socket(socket.AF_INET,  socket.SOCK_DGRAM,  socket.IPPROTO_UDP)  self.data_socket = socket.socket(socket.AF_INET,  socket.SOCK_DGRAM,  socket.IPPROTO_UDP)   # Bind data socket to fpga  self.data_socket.bind(self.data_recv)   # Bind config socket to fpga  self.config_socket.bind(self.cfg_recv)   self.data = []  self.packet_count = []  self.byte_count = []   self.frame_buff = []   self.curr_buff = None  self.last_frame = None   self.lost_packets = None  def read(self, timeout=1):  # Configure  self.data_socket.settimeout(timeout)   # Frame buffer  ret_frame = np.zeros(UINT16_IN_FRAME, dtype=np.uint16)   # Wait for start of next frame  while True:  packet_num, byte_count, packet_data = self._read_data_packet()  if byte_count % BYTES_IN_FRAME_CLIPPED == 0:  packets_read = 1  ret_frame[0:UINT16_IN_PACKET] = packet_data  break   # Read in the rest of the frame  while True:  packet_num, byte_count, packet_data = self._read_data_packet()  packets_read  = 1   if byte_count % BYTES_IN_FRAME_CLIPPED == 0:  self.lost_packets = PACKETS_IN_FRAME_CLIPPED - packets_read  return ret_frame   curr_idx = ((packet_num - 1) % PACKETS_IN_FRAME_CLIPPED)  try:  ret_frame[curr_idx * UINT16_IN_PACKET:(curr_idx   1) * UINT16_IN_PACKET] =   packet_data  except:  pass   if packets_read gt; PACKETS_IN_FRAME_CLIPPED:  packets_read = 0  def _read_data_packet(self):  """Helper function to read in a single ADC packet via UDP   Returns:  int: Current packet number, byte count of data that has already been read, raw ADC data in current packet   """  data, addr = self.data_socket.recvfrom(MAX_PACKET_SIZE)  packet_num = struct.unpack('lt;1l', data[:4])[0]  byte_count = struct.unpack('gt;Q', b'x00x00'   data[4:10][::-1])[0]  packet_data = np.frombuffer(data[10:], dtype=np.uint16)  return packet_num, byte_count, packet_data