2012-09-26 30 views
13

Estoy intentando transmitir UDP desde un programa Python a dos programas LabView. Parece que no puedo enviar la transmisión y no estoy seguro de dónde está equivocada la inicialización del socket, la transmisión parece bastante simple. Por lo que puedo ver, no hay datos recibidos por las otras PC. Además, necesitaré este programa para recibir datos de las otras PC en el futuro. Parece que eso no debería complicar las cosas, pero cada paso del camino ha sido complicado para mí.Python UDP Broadcast no enviando

Antecedentes: no tengo experiencia en software, esto es solo algo que se me asignó en el trabajo. Cualquier ayuda es apreciada. El código está abajo. Python 2.7.

from threading import Thread 
import time 
from socket import * 

cs = socket(AF_INET, SOCK_DGRAM) 
cs.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) 
cs.setsockopt(SOL_SOCKET, SO_BROADCAST, 1) 
cs.connect(('<broadcast>', 5455)) 


while 1: 
    cmd = int(raw_input('send: ')) 
    if (cmd == 1): 
     cs.send('1') 
    time.sleep(1) 
+0

¿Cómo se ve el código de su receptor? –

+1

no 'connect()' un socket UDP. Además, asegúrese de que todos los firewall estén desactivados. – tMC

+0

Está en Labview. Sin embargo, el código está bien, funciona bien cuando no estoy transmitiendo. Todo lo que he cambiado es mi código python para configurar la transmisión. – TDK

Respuesta

29

Usted no necesita connect() a un socket UDP, es necesario:

cs.sendto(data, ('255.255.255.255', 5455)) 

EDIT: Esto parece funcionar para mí:

from socket import * 
cs = socket(AF_INET, SOCK_DGRAM) 
cs.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) 
cs.setsockopt(SOL_SOCKET, SO_BROADCAST, 1) 
cs.sendto('This is a test', ('255.255.255.255', 54545)) 

En otra máquina me encontré con tcpdump:

tcpdump -i eth1 port 54545 -XX 
listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes 

14:04:01.797259 IP 10.22.4.45.33749 > 255.255.255.255.54545: UDP, length 14 
0x0000: ffff ffff ffff f0de f1c4 8aa6 0800 4500 ..............E. 
0x0010: 002a 0000 4000 4011 2c81 0a16 042d ffff .*[email protected]@.,....-.. 
0x0020: ffff 83d5 d511 0016 fe38 5468 6973 2069 .........8This.i 
0x0030: 7320 6120 7465 7374 0000 0000   s.a.test.... 

Usted ca n ver el texto en la carga útil. Además de los nombres de difusión dst Ethernet y IP.

+0

Sí, lo intenté de nuevo y no funciona. Además, tengo un programa labview que hace exactamente lo que hace el código python y funciona bien, por lo que el problema de difusión debe ser del lado de Python. – TDK

+0

@ user1686820 Acabo de probarlo y el pitón funciona. (ver edición). No estoy familiarizado con LabVIEW, así que no puedo decirte si eso tiene algo que ver con eso. – tMC

+0

raro, acabo de cambiar el IP a 169.254.255.255 y está funcionando. Creo que este es un problema de LabView, ya que lo vi antes cuando blabing labview a labview. Gracias por la ayuda. – TDK