2012-09-26 16 views
13

Próbuję transmisji UDP z programu Python do dwóch programów LabView. Nie wydaje mi się, aby transmisja była wysyłana i nie jestem pewien, gdzie inicjalizacja gniazda jest nieprawidłowa, czy nadawanie wydaje się dość proste? O ile widzę, nie ma danych odbieranych przez inne komputery. Ponadto będę potrzebował tego programu, aby w przyszłości otrzymywać dane z innych komputerów. Wygląda na to, że nie powinno to komplikować, ale każdy krok był dla mnie skomplikowany!Python UDP Broadcast nie wysyłający

Tło: Mam zerowe doświadczenie w programowaniu, to jest coś, co mi przypisano w pracy. Każda pomoc jest doceniana. Kod znajduje się poniżej. 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

Jak wygląda kod odbiornika? –

+1

nie 'connect()' a gniazdo UDP. Upewnij się także, że wszystkie zapory są wyłączone. – tMC

+0

To jest w Labview. Kod jest w porządku, działa dobrze, gdy nie nadaję. Wszystko, co zmieniłem, to mój kod Pythona, aby skonfigurować nadawanie. – TDK

Odpowiedz

29

Nie musisz connect() do gniazda UDP, trzeba:

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

EDIT: To wydaje się działać dla mnie:

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

na innym komputerze wpadłem 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.... 

You ca n zobacz tekst w polu danych. Oprócz nadawania addycji Ethernet i IP dst.

+0

Tak, właśnie spróbowałem tego ponownie i to nie działa. Ponadto mam program labview, który robi dokładnie to, co robi kod Pythona i działa dobrze, więc problem z emisją musi być po stronie Pythona. – TDK

+0

@ user1686820 Właśnie przetestowałem to i python działa. (patrz edycja). Nie jestem obeznany z labview, więc nie mogę ci powiedzieć, czy to ma coś z tym wspólnego. – tMC

+0

Dziwne, właśnie zmieniłem IP na 169.254.255.255 i działa. Myślę, że jest to problem LabView, ponieważ widziałem go wcześniej, kiedy bviewing labview do labview. Dzięki za pomoc. – TDK

Powiązane problemy