Python UDP广播未发送

标签 python udp broadcast labview

我正在尝试从 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)

最佳答案

您不需要 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 目标地址。

关于Python UDP广播未发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12607516/

相关文章:

python - 为什么一个输入的权重比另一个输入的权重大得多

c - 与许多实时设备保持连接

JAVA:广播UDP数据包时检测 self

Android - Intent 以某种方式增加?

java - 为什么我来自 Android 的 UDP 消息不起作用?

java - 如何让 Activity 在暂停时对本地广播使用react?

python - 找到 MacPorts 包?

python - 使用 Python 的 3 个矩阵的 Kronecker 乘积

python - Beautiful Soup - 如何抓取包含特定 src 属性的图像?

c - sendto() - C 中的 UDP 单播