- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在开发 BeagleBone Black(运行 Debian Linux),我正在尝试使用 Qt 5.3 发送一些数据报以通过 UDP 进行广播。
这是我的代码:
#include <QCoreApplication>
#include <QUdpSocket>
#include <QDebug>
#include <sys/socket.h>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QUdpSocket socket;
socket.bind(QHostAddress::AnyIPv4, 1111);
int opt=1;
setsockopt(socket.socketDescriptor(), SOL_SOCKET, SO_BROADCAST, &opt, sizeof(int));
QByteArray d = QString("Hello, world!").toLatin1();
int r = socket.writeDatagram(d, QHostAddress::Broadcast, 1111);
qDebug() << r;
qDebug() << socket.error();
qDebug() << socket.errorString();
return a.exec();
}
不幸的是它不起作用,程序的输出是:
-1
QAbstractSocket::NetworkError
"Unable to send a message"
所以 writeDatagram
原语失败了。为我的桌面 PC 编译时,完全相同的代码工作得非常好……所以我假设代码很好,并且可能有一些与 BBB 特别相关的东西。
我也尝试将数据报发送到特定的 IP 地址(而不是广播),但它没有改变:BBB 似乎根本无法发送 UDP 数据包......
对此有什么想法吗?是否需要在 BBB 上进行配置才能使其正常工作?
* 更新 *
我稍微修改了代码以在该套接字上显式启用 SO_BROADCAST 并将套接字绑定(bind)到任何 IPv4 接口(interface)(只是为了测试)但它无论如何都不起作用......
查看进程 strace
(你可以看到它 here )似乎 linux 内核无法将 255.255.255.255 识别为广播地址并告知网络无法访问...
Here是我的网络配置...我觉得不错,但不要纠正我!
最佳答案
我可以在运行 2.6.32-431.20.3.el6.x86_64 的 RHEL 6 上重现这个问题。即使 bind
到 0.0.0.0
成功,后续的 writeDatagram
也会失败。当您绑定(bind)到特定界面时,一切都运行良好。
顺便说一句,您的网络接口(interface)配置不正确,尽管我看不出仅此原因导致程序的行为有任何差异。 eth0
上的广播地址应该是 192.168.79.255
,不是 255.255.255.255
。
#include <QCoreApplication>
#include <QUdpSocket>
#include <QNetworkInterface>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QUdpSocket socket;
QList<QHostAddress> ifAddrs = QNetworkInterface::allAddresses();
qDebug() << ifAddrs;
QHostAddress ifAddr(QHostAddress::Any);
foreach (QHostAddress ia, ifAddrs) {
if (ia.protocol() == QAbstractSocket::IPv6Protocol) continue;
if (ia.isInSubnet(QHostAddress::LocalHost, 8)) continue;
ifAddr = ia;
break;
}
if (false) ifAddr = QHostAddress::Any; // *** Change to if (true) to make the write fail.
qDebug() << ifAddr;
if (!socket.bind(ifAddr, 1111)) {
qDebug() << "bind failed" << socket.error();
}
QByteArray d = QString("Hello, world!").toLatin1();
int r = socket.writeDatagram(d, QHostAddress::Broadcast, 1111);
qDebug() << r;
if (r < 0) {
qDebug() << socket.error();
qDebug() << socket.errorString();
}
return 0;
}
关于linux - BeagleBone Black : Qt 5. 3 无法在 UDP 中发送数据报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24866807/
尝试将 MPU6050 连接到在 Beaglebone-IO 下运行 Debian、Node.js 和 Johnny-Five 的 Beaglebone Black。 使用 Johnny-Five 示
我有一个 RFID 模块连接到我的 beaglebone 并使用 python 代码读取 ID 标签。现在,我希望我的 python 代码在没有任何命令的情况下登录我的 beaglebone 时直接在
在 beagleboard 或 beaglebone 中,引脚有不同的工作模式。对于以前的内核,它们位于/sys/kernel/debug/omap_mux 中。你知道最后一个内核中那些文件在哪里吗?
我听说可以直接在 Beaglebone black 上进行开发和调试。我是做Java的。目前我必须生成 jar 并复制到开发板然后运行。但这样我就无法调试和单步执行代码。在本地调试也没有什么意义,因为
提前致谢。我正在尝试在 Texas Instrument 制造的 beaglebone black (BBB) 上播放视频。由于有很多关于使用 ffmpeg 和 SDL 的好教程,我决定使用它。获取有
我是 beaglebone 的新手,我需要一些帮助来解决我面临的一些问题。 我用 c 编写了一段代码(在装有 ubuntu 的笔记本电脑上运行),其中打开了一个服务器套接字(运行一个 apache 服
我是 beaglebone 的新生。我需要你的帮助。我已经在 Eclipse 中的 64 位 xubuntu 以及 codeblocks 环境中安装了交叉编译器工具链 arm-linux-gnueab
我正在尝试遵循发现的演练/教程 here . 我正在运行内核版本 4.1.1-ti-r2,该版本的 rcn-ee.net/deb/trusty-armhf 文件夹中似乎没有任何头文件。这意味着我无法迈
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我正在读取 beaglebone gpio 引脚中的霍尔传感器输出,对于中断服务例程需要执行的每个上升沿。那么,如何在 beaglebone 中使用外部中断呢?是否有用于此目的的标准驱动程序? 谢谢。
当我使用如下以太网电缆将其插入新网络时,我需要知道如何使用 SSH 连接到 beaglebone(或 beagleboard): $ ssh root@beaglebone.local 到目前
我昨天买了 beaglebone black 并尝试使用 USB 连接它。正如我所读到的那样,它预装了运行在 192.168.7.2 的 Linux Distro,我们可以使用 ssh 访问它。但我无
我们目前正在为 BeagleBone Black 开发一个应用程序(使用标准的 Angstrom 发行版)。它在 GDB(由 Netbeans 远程控制)下运行了一段时间(5-10 分钟),但在某个相
在 C++ 中进行串行操作似乎很痛苦,此外,在 Beaglebone Black 上进行操作也很困难,所以我需要有一些专业知识的人! 我使用以下命令创建了/dev/ttyO4: echo BB-UAR
我正在通过串行端口(ttyO2)连接 BBB 和一组 arduino。我有一个数组要从 BBB 发送到一组 arduino。我需要让 BBB 发送请求并等待其中一个 arduino 的回复,但如果在一
美好的一天, 我想弄清楚如何在 openCV 的 beaglebone 上关闭相机。我已经尝试了很多命令,例如 release(&camera),但都不存在,而且当我不希望它打开时,相机会继续保持打开
我需要直接从 Python 代码 关闭 Beaglebone black,而不使用任何 gpio 按钮或任何硬件干预。 有命令行 shutdown -h now 但此命令不适用于 python 代码,
我的知识:我的 Linux 知识还处于初级阶段,所以如果我做了一些愚蠢的事情,请纠正我,或者给我你的意见。 我的问题:我想以相同的方式配置一堆单板计算机(Raspberry Pi/BeagleBone
为了通过 USB 从我的 ubuntu 主机获取互联网,我更改了 beaglebone 上的路由 route add default gw 192.168.7.1 并将/etc/resolv.conf
我需要在机器人上执行一组命令,机器人已经连接了Mini-ITX PC,但速度很慢,而且实时结果不理想。 我想使用外部 BeagleBone 作为处理单元,但如何配置设置以在 BeagleBone 上处
我是一名优秀的程序员,十分优秀!