2012-09-26 19 views
13

Sto provando a trasmettere UDP da un programma Python a due programmi LabView. Non riesco a trasmettere la trasmissione e non sono sicuro di dove sia sbagliata l'inizializzazione del socket, la trasmissione sembra abbastanza semplice ?? Per quanto posso vedere, non ci sono dati ricevuti dagli altri PC. Inoltre, avrò bisogno di questo programma per ricevere i dati dagli altri PC in futuro. Sembra che non dovrebbe complicare le cose, ma ogni passo è stato complicato per me!Python UDP Broadcast non invia

Contesto: non ho esperienza software, questo è solo qualcosa che mi è stato assegnato al lavoro. Qualsiasi aiuto è apprezzato. Il codice è sotto 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

Che aspetto ha il codice del tuo ricevitore? –

+1

non 'connect()' un socket UDP. Inoltre, assicurarsi che tutti i firewall siano disabilitati. – tMC

+0

È in Labview. Il codice funziona bene, funziona bene quando non sto trasmettendo. Tutto quello che ho cambiato è il mio codice Python per impostare la trasmissione. – TDK

risposta

29

Non c'è bisogno di connect() ad un socket UDP, è necessario:

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

EDIT: Questo sembra funzionare per me:

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)) 

su un'altra macchina mi sono imbattuto 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.... 

Si ca n vedere il testo nel payload. Così come i broadcast Ethernet e IP dst addrs.

+0

Sì, ho appena provato di nuovo e non funziona. Inoltre, ho un programma labview che fa esattamente ciò che fa il codice Python e funziona bene, quindi il problema di trasmissione deve essere sul lato python. – TDK

+0

@ user1686820 L'ho appena testato e il python funziona. (vedi modifica). Non ho familiarità con Labview quindi non posso dirti se questo ha qualcosa a che fare con questo. – tMC

+0

strano, ho appena cambiato l'ip in 169.254.255.255 e sta funzionando. Penso che questo sia un problema di LabView, dal momento che l'ho visto prima quando bcasting labview a labview. Grazie per l'aiuto. – TDK