Я пытаюсь связаться с платой FPGA, на которой был реализован базовый протокол UDP. Я использую Windows 7 ПК, python 2.7.6 32 бит.Отправить сообщение udp вне подсети
мой компьютер подключен к локальной сети. автоматически получает этот IP-адрес (из ipconfig): IP 192.168.2.1, Маска подсети: 255.255.255.0
Моя плата подключена к компьютеру с помощью переключателя. IP платы фиксирован (в аппаратном коде) - 192.168.4.10.
если я правильно понимаю - мой компьютер и моя плата находятся в разных подсетях, потому что 2 из 4 правых ip-номеров отличаются.
Когда я отправляю UDP-пакет, он не получает его. когда я вручную заставляю свой компьютер быть тем же самым ip (192.168.2.1), но 255.255.0.0 маску подсети, он получает.
код Python я использовать для отправки что-то вроде этого:
import socket
UDP_IP = "192.168.4.10"
RECEIVE_PORT = 5005
SEND_PORT = 5005
MESSAGE = "Hello, World!"
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock .bind(('', SEND_PORT))
sock.sendto(MESSAGE, (UDP_IP, RECEIVE_PORT))
, что может быть причиной? Есть ли способ, я могу исправить это в коде? Есть ли способ изменить маску подсети в коде? Что я должен прочитать, чтобы понять мою проблему?
Если вам повезет, ваш удаленное устройство также прослушивает многоадресной UDP или передачи, и вы можете получить пакет через к нему таким образом. если вы также слушаете многоадресную/широковещательную рассылку UDP, вы можете получить ответ. НО ТОЛЬКО, если удаленное устройство KNOWS отвечает на ваш аппарат через многоадресный/широковещательный UDP. Если вы застряли в одноадресной рассылке UDP, то @nodakai дает единственное, что есть - добавьте псевдоним вашей сетевой карты (если можете). –
PS: Добавление псевдонима программно является нетривиальным. (1) быть администратором, (2) заставить сетевой адаптер быть STATIC IP-адресом (если он в настоящее время является DHCP), (3) добавить псевдоним. Нет никакого независимого от ОС способа сделать все это. И я не знаю, что такое python networking достаточно хорошо, чтобы предлагать. –