我正在搜索两天如何发送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)
答案 0 :(得分:0)
我知道这是旧的,但这对我来说在Ubuntu 16.04 LTS上可以向任何听众广播消息:
QUdpSocket *udp = new UdpSocket(this);
QByteArray dgram = "hello";
udp->writeDatagram(dgram.data(), dgram.size(), QHostAddress::Broadcast, ipPort);