2014-01-26 3 views
3

Я пытаюсь связаться с устройством A/V через UDP. Я отправляю пакет в местную широковещательную рассылку 192.168.0.255, и он отвечает информацией об устройстве. Я могу проверить, работает ли он с Wireshark. Тем не менее, я никогда не получите ответ в Python, он просто сидит там:Почему я не могу получить UDP-пакеты в Python?

import socket 

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) #Internet, UDP 
s.bind(('', 64000)) 
#s.sendto('0:0',('192.168.0.255',63630)) 
s.connect(('192.168.0.255',63630)); 
s.send('0:0') 
#s.listen(1) 
data,addr = s.recvfrom(1024) 
print data 
print 'from', addr 

Я посылаю его из 64000 (случайного порта) на 63630 порта, поэтому связывание и прием на 64000 порта он был отправлен из , и отправляется обратно, должен работать, исправлять? Я пропустил шаг?

ответ

3

Включите SO_BROADCAST опцию для отправки широковещательного сообщения:

s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) 

также заменить следующие

s.connect(('192.168.0.255',63630)) 
s.send('0:0') 

с:

s.sendto('0:0', ('192.168.0.255',63630)) 

Согласно Linux connect(2) страница руководства:

Если сокет sockfd имеет тип SOCK_DGRAM, то адрес является адресом , к которому датаграммы посылаются по умолчанию, и единственный адрес, от которые принимаются дейтаграммы.

Согласно MSDN - connect (Windows Sockets):

Для установления соединения сокета (например, типа SOCK_DGRAM), операция выполняется Connect является просто установить адрес назначения по умолчанию который может быть использован на последующем отправить/WSASend и вызовы recv/WSARecv. Любые датаграммы, полученные от адреса, отличного от , указанный адрес назначения будет отброшен.

+0

, но он отправляет широковещательную рассылку, иначе он не будет поднят устройством ip правильно? – NoBugs

+0

@NoBugs. Чтобы выяснить, является ли широковещательная передача проблемой или нет, попробуйте отправить сообщение на определенный IP-адрес (A/V-устройство). – falsetru

+0

Справа! Установка ip 0.255 в 0.realaddress работает! Итак, я должен найти, что такое устройство ip, прежде чем делать это, трансляция не работает в Python? – NoBugs

Смежные вопросы