20

Pythonプログラムから2つのLabViewプログラムにUDPブロードキャストしようとしています。ブロードキャストを送信できないようで、ソケットの初期化がどこで間違っているのかわかりません。ブロードキャストは十分に単純に見えますか?私の知る限り、他のPCがデータを受信して​​いません。また、将来的に他のPCからデータを受信するためにこのプログラムが必要になります。それは物事を複雑にするべきではないようですが、道のすべてのステップは私にとって複雑です!

背景:私はソフトウェアの経験がありません。これは私が仕事で割り当てられたものです。どんな助けでも大歓迎です。コードは以下のとおりです。Python2.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)
4

1 に答える 1

40

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  .*..@.@.,....-..
0x0020:  ffff 83d5 d511 0016 fe38 5468 6973 2069  .........8This.i
0x0030:  7320 6120 7465 7374 0000 0000            s.a.test....

ペイロードにテキストが表示されます。ブロードキャストイーサネットおよびIPアドレスアドレスと同様に。

于 2012-09-26T17:57:52.563 に答える