У меня возникли проблемы с получением пакета UDP, отправленного из FPGA в программе python. Я проверил аналогичные вопросы и сделал следующее:Не удается получить пакет UDP в Python
- проверить, что Wireshark может увидеть пакеты UDP
- нетрудоспособного брандмауэра Windows в ПК
- использован sock.bind(), так как это пакеты UDP
- вручную установить MAC-адрес назначения на Ethernet-фрейме, поскольку FPGA не поддерживает ARP
- Установить IP-адрес для трансляции 10.10.255.255 для тестирования, не получено пакетов
- Установить контрольную сумму UDP пакета от отправителя до 0x00 00
Вот код питона приемник:
import socket
import sys
UDP_IP = "10.10.10.87"
UDP_PORT = 4660
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind((UDP_IP, UDP_PORT))
print("Socket: "+str(sock.getsockname()))
while True:
data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes
print(data)
print(addr)
sys.stdout.flush()
При испытании против другого питона скрипт, который отправляет 10.10.10.87:4660 (с другого компьютера в сети 10.10.10) приемник сценария работы хорошо. Я даже пытался воссоздать побайтовый байт UDP в FPGA из пакетов, которые, как мне известно, получены OK (Различия - это IP-адрес источника, порт & MAC, контрольные суммы (отключены), идентификация).
Вот результат для обоих пакетов из Wireshark:
Wireshark UDP packet (Python UDP пакет, который получает получил ОК слева, Xilinx FPGA пакет, который не получил от питона справа)
Я нахожусь не уверен, что еще попробовать. Любая помощь будет оценена по достоинству.
* Рядом *: Установка 'UDP_IP' на ваш локальный адрес является чрезмерно конкретной. Вместо этого сделайте 'UDP_IP = '' 'для привязки ко всем интерфейсам. Это не решит сегодняшнюю проблему, но может предотвратить проблемы в будущем. –