web-dev-qa-db-fra.com

Python UDP Broadcast n'envoie pas

J'essaie de diffuser UDP à partir d'un programme Python vers deux programmes LabView. Je n'arrive pas à obtenir la diffusion à envoyer et je ne sais pas où mon initialisation de socket est incorrecte, la diffusion semble assez simple? "Pour autant que je sache, aucune autre donnée n'est reçue par les autres PC. De plus, j'aurai besoin de ce programme pour recevoir des données des autres PC à l'avenir. Il semble que cela ne devrait pas compliquer les choses, mais à chaque étape. du chemin a été compliqué pour moi!

Contexte: Je n'ai aucune expérience logicielle, c'est juste quelque chose qui m'a été assigné au travail. Toute aide est appréciée. Le code est ci-dessous. 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)
18
TDK

Vous n'avez pas besoin de connect() à un socket UDP, à la place:

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

EDIT: Cela semble fonctionner pour moi:

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

Sur une autre machine, j'ai exécuté 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  .*..@.@.,....-..
0x0020:  ffff 83d5 d511 0016 fe38 5468 6973 2069  .........8This.i
0x0030:  7320 6120 7465 7374 0000 0000            s.a.test....

Vous pouvez voir le texte dans la charge utile. Ainsi que les adresses de diffusion Ethernet et IP dst.

36
tMC