QUdpSocket发送组播和接受组播数据
需要写一个发送组播的窗口测试程序,就想着顺便也接受显示出来下
QHostAddress address(ip);
udpSend.bind(QHostAddress::AnyIPv4,port,QUdpSocket::ShareAddress);//这里绑定如果注释了也没有问题,组播数据还是可以发送出去,程序运行时会报错
QUdpSocket::leaveMulticastGroup() called on a QUdpSocket when not in QUdpSocket::BoundState
udpSend.leaveMulticastGroup(address);
udpSend.joinMulticastGroup(address);
udpReciver.bind(QHostAddress::AnyIPv4,port,QUdpSocket::ShareAddress);//接受的得一定要绑定
udpReciver.leaveMulticastGroup(address);
udpReciver.joinMulticastGroup(address);
disconnect(&udpReciver, SIGNAL(readyRead()),this, SLOT(readPendingDatagrams()));
connect(&udpReciver, SIGNAL(readyRead()),this, SLOT(readPendingDatagrams()));
如果在程序中发送和接受都绑定,则一定要都用QUdpSocket::ShareAddress
void Widget::readPendingDatagrams()
{
while (udpReciver.hasPendingDatagrams())
{
QByteArray data;
data.resize(udpReciver.pendingDatagramSize());//这里data一定要resize,不然读不出数据
int len = udpReciver.readDatagram(data.data(),udpReciver.size());//这里一定不要使用readAll(),会报错 QIODevice::read (QUdpSocket): device not open
qDebug() << data.toHex();
ui->textEdit->append(data.toHex().constData());
}
}