C++ 基于QT的UDP广播

C++ 基于QT的UDP广播,c++,linux,qt,networking,ubuntu-14.04,C++,Linux,Qt,Networking,Ubuntu 14.04,两天以来我一直在搜索如何发送UDP广播。我已经看到了很多例子(还有qt网站上的broadcastReceiver和broadcastSender),但它们仍然不适用于我。当我尝试发送广播时,方法QUdpSocket::writeDatagram(..)返回-1,并且不传输数据。我使用的是ubuntu 14.04 x64。我想知道是否有一个特殊的操纵,我应该做,使这广播工作。对我的英语水平表示感谢和抱歉 这是我的密码 envoyeurUDP=new QUdpSocket(this); recep

两天以来我一直在搜索如何发送UDP广播。我已经看到了很多例子(还有qt网站上的broadcastReceiver和broadcastSender),但它们仍然不适用于我。当我尝试发送广播时,方法QUdpSocket::writeDatagram(..)返回-1,并且不传输数据。我使用的是ubuntu 14.04 x64。我想知道是否有一个特殊的操纵,我应该做,使这广播工作。对我的英语水平表示感谢和抱歉

这是我的密码

 envoyeurUDP=new QUdpSocket(this);
recepteurUDP=new QUdpSocket(this);
//démarrage du serveur pour UDP
if (!recepteurUDP->bind(QHostAddress::AnyIPv4,7878,QUdpSocket::ShareAddress | QUdpSocket::ReuseAddressHint)) {
  qDebug("Impossible de créer la socket en écoute");
 exit(EXIT_FAILURE);
}

connect(recepteurUDP, SIGNAL(readyRead()), this, SLOT(lireDatagrams()));
void FileTransferManager::lireDatagrams(){

char* donnees;
while (recepteurUDP->hasPendingDatagrams()) {
        QByteArray datagram;
        datagram.resize(recepteurUDP->pendingDatagramSize());
        recepteurUDP->readDatagram(datagram.data(), datagram.size());
        donnees=datagram.data();
    }}
这个是用来发送数据报的

void FileTransferManager::sendDatagram(string msg, QHostAddress addr){
QByteArray datagram=msg.data();
    qint64 r=envoyeurUDP->writeDatagram(datagram.data(), datagram.size(),  addr, 7878);}
我是这样用的:

fileManager.sendDatagram("blabla",QHostAddress::Broadcast);
以下是我的ifconfig命令的输出:

eth0链路封装:以太网HWaddr f8:a9:63:2d:89:ff
上行广播多播MTU:1500度量:1 数据包reçus:0错误:0:0溢出:0帧:0 发送数据包:0错误:0丢弃:0溢出:0载波:0 冲突:0 lg文件传输:1000 八位组reçus:0(0.0b)八位组传输:0(0.0b)

lo-Link营地:Boucle区域设置
inet adr:127.0.0.1面具:255.0.0.0 adr inet6::1/128范围:Hôte 上环回运行MTU:65536公制:1 数据包reçus:5311错误:0:0溢出:0帧:0 发送数据包:5311错误:0丢弃:0溢出:0载波:0 冲突:0 lg文件传输:0 八位字节reçus:661728(661.7KB)传输八位字节:661728(661.7KB)

wlan0链路封装:以太网HWaddr b8:ee:65:ab:4f:77
inet adr:10.42.0.1 Bcast:10.42.0.255 Masque:255.255.255.0 adr inet6:fe80::baee:65ff:feab:4f77/64范围:留置权 上行广播运行多播MTU:1500度量:1 数据包reçus:14069错误:0:0溢出:0帧:0 发送数据包:15529错误:0丢弃:0溢出:0载波:0 冲突:0 lg文件传输:1000 八位字节reçus:6007592(6.0MB)八位字节传输:2307422(2.3MB)


我知道这很旧,但我在Ubuntu 16.04 LTS上可以将消息广播给任何听众:

QUdpSocket *udp = new UdpSocket(this);
QByteArray dgram = "hello";
udp->writeDatagram(dgram.data(), dgram.size(), QHostAddress::Broadcast, ipPort);

需要一个简短的代码示例来演示问题。否则你在这里可能得不到任何帮助。您的
ifconfig
的输出也将有助于检查地址是否确实是广播的。谢谢您,我编辑了我的帖子以添加代码。调用
writeDatagram()
失败后,数据报套接字上的
error()
errorString()
返回什么?errorString()返回“无法发送消息”。error()返回一个SocketError对象,我不知道如何打印它。我如何打印它?