2016-08-16 5 views
0

Мне очень трудно получить передачу UDP в Python. Устройство, подключенное к ПК через ethernet, передает сообщения по определенному адресу и порту. Я пробовал многочисленные многоадресные примеры python, найденные в сети, но я никогда не могу получить данные. Используя wirehark, я вижу, что широковещательные передачи UDP достигают ПК.Получите нестандартный python UDP broadcast

Wireshark capture

Я пробовал на OSX и Linux, и ни работы. Я могу только предположить, что сообщения не принимаются, потому что устройство использует нестандартную структуру UDP, т. Е. Проверку контрольной суммы и т. Д.

Любые идеи о том, как получить эти передачи UDP?

Спасибо!

Edit: В простейшем случае текущий код будет:

from socket import * 
s=socket(AF_INET, SOCK_DGRAM) 
s.bind(('239.255.60.60',4876)) 
m=s.recvfrom(1024) 
print (m[0]) 

Однако я попытался дополнительные групповые примеры, такие как Multicast in Python и я еще, чтобы быть в состоянии получить что-нибудь!

+0

Пожалуйста, добавьте минимальный, полный и проверяемый пример. http://stackoverflow.com/help/mcve – rfkortekaas

+1

Обычно ваш сетевой стек вашей операционной системы поймает IP-пакеты для вас; если вы хотите работать с необработанным IP-адресом, вы должны предоставить нам более подробную информацию (какая ОС, какая версия Python и, пожалуйста, * показать тонкий код *). – wazoox

+0

Я использую Python3 на Ubuntu, я считаю, что мне придется работать с сырыми сокетами и начинать с нуля ... – user2818700

ответ

0

Вы не получаете широковещательную передачу, потому что вы не используете широковещательный адрес.

Либо использование:

Или правильный широковещательный адрес для вашего IP.

+0

Я пробовал использовать '', а также 0.0.0.0, но все равно никаких данных не получено. – user2818700

+0

Помогает ли вам добавить следующее до привязки: s.setsockopt (socket.SOL_SOCKET, socket.SO_BROADCAST, 1) – rfkortekaas

+0

К сожалению, нет :( – user2818700

0

Хорошо нашел ответ, скорее изолированный от этого сценария, и ногами себя для того, чтобы его игнорировать.

Устройство, подключенное через сеть Ethernet, ожидало назначения IP-адреса! Wireshark должен фиксировать сетевой трафик на более низком уровне, чем python.

В любом случае вручную назначено устройство на ip-адрес, и теперь он работает. Много облегчения.