2012-09-26 98 views
13

我想從一個Python程序到兩個LabView程序的UDP廣播。我似乎無法得到廣播發送,我不知道我的套接字初始化是錯誤的,廣播似乎足夠簡單?據我所知,其他電腦沒有收到任何數據。另外,我將需要該程序在未來從其他PC接收數據。看起來這不應該讓事情複雜化,但是對於我來說,每一步都很複雜!Python的UDP廣播沒有發送

背景:我沒有軟件經驗,這只是我在工作中分配的東西。任何幫助表示讚賞。代碼如下。 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

接收者的代碼是什麼樣的? –

+1

不要連接()一個UDP套接字。另外,確保所有的防火牆都被禁用。 – tMC

+0

它在Labview中。代碼沒問題,但是當我沒有廣播時它工作正常。我所改變的是我的python代碼來設置廣播。 – TDK

回答

29

你不必connect() UDP套接字,您需要:

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

編輯:這似乎爲我工作:

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

在另一臺機器我跑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看到有效載荷中的文字。以及廣播以太網和IP dst地址。

+0

是的,我只是試了一遍,它不起作用。另外,我有一個labview程序,可以完成python代碼的工作,它可以正常工作,所以廣播問題必須在python一側。 – TDK

+0

@ user1686820我剛測試過它和python的工作。 (見編輯)。我對labview不熟悉,所以我不能告訴你這與它有什麼關係。 – tMC

+0

很奇怪,我只是將IP更改爲169.254.255.255,它正在工作。我認爲這是一個LabView問題,因爲在將labview轉換爲labview時,我曾經看到它。謝謝您的幫助。 – TDK