Python UDP广播不发送

TDK*_*TDK 17 python labview udp broadcast

我正在尝试从Python程序到两个LabView程序的UDP广播.我似乎无法播放广播,我不知道我的套接字初始化是错误的,广播似乎很简单?据我所知,其他PC没有收到任何数据.此外,我将需要此程序以便将来从其他PC接收数据.这似乎不应该让事情变得复杂,但对我而言,每一步都很复杂!

背景:我没有软件经验,这只是我在工作中分配的东西.任何帮助表示赞赏.代码如下.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)
Run Code Online (Sandbox Code Playgroud)

tMC*_*tMC 37

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

cs.sendto(data, ('255.255.255.255', 5455))
Run Code Online (Sandbox Code Playgroud)

编辑:这似乎对我有用:

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))
Run Code Online (Sandbox Code Playgroud)

在另一台机器上我运行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....
Run Code Online (Sandbox Code Playgroud)

您可以在有效负载中看到该文本.以及广播以太网和IP dst添加器.

  • 这可能是链路本地寻址的广播地址.`255.255.255.255`不是子网IP网络的正确广播. (4认同)
  • @aag我认为你使用的是python3 - 而不是你必须编码数据:`cs.sendto("TestText".encode(),("255.255.255.255",54545))`见[sendto](https:// docs.python.org/3.4/library/socket.html?highlight=sendto#socket.socket.sendto)[ str.encode](https://docs.python.org/3.4/library/stdtypes.html?highlight=编码#str.encode) (3认同)