使用QT进行UDP广播

时间:2016-04-09 12:13:55

标签: c++ linux qt networking ubuntu-14.04

我正在搜索两天如何发送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
          UP BROADCAST MULTICAST MTU:1500公制:1           Packetsreçus:0 erreurs:0:0 overruns:0 frame:0           TX数据包:0错误:0丢弃:0溢出:0载波:0           冲突:0 lg文件传输:1000           八位字节:0(0.0 B)八位字节传输:0(0.0 B)

lo link encap:Boucle locale
          inet adr:127.0.0.1 Masque:255.0.0.0           adr inet6::: 1/128范围:Hôte           UP LOOPBACK RUNNING MTU:65536公制:1           Packetsreçus:5311 erreurs:0:0 overruns:0 frame:0           TX数据包:5311错误:0丢弃:0溢出:0载波:0           冲突:0 lg文件传输:0           Octetsreçus:661728(661.7 KB)Octets transmis:661728(661.7 KB)

  

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范围:留置权             UP BROADCAST RUNNING MULTICAST MTU:1500公制:1             Packetsreçus:14069 erreurs:0:0 overruns:0 frame:0             TX数据包:15529错误:0丢弃:0溢出:0载波:0             冲突:0 lg文件传输:1000             Octetsreçus:6007592(6.0 MB)Octets transmis:2307422(2.3 MB)

1 个答案:

答案 0 :(得分:0)

我知道这是旧的,但这对我来说在Ubuntu 16.04 LTS上可以向任何听众广播消息:

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