天天看点

Qt UDP组播的应用

        最近学习了组播的应用。组播传输:在发送者和每一接收者之间实现点对多点网络连接。如果一台发送者同时给多个的接收者传输相同的数据,也只需复制一份的相同数据包。它能提高了效率。减少了骨干网络出现拥塞的可能性。

        因为最近在看视频传输,对于一个客户端的视频,如果通过组播的方式传输给其他端,那么对于传输效率和处理速度是有非常大的帮助的,所以组播在一些特定领域起到了很大的帮助。

        那么在Qt中一个socket加入组播应该怎么写呢?

multicastsocket = new QUdpSocket(this);
    QHostAddress multiAddr("224.2.3.1");//这里要选一个组播地址
    if(!multicastsocket->bind(QHostAddress::AnyIPv4,20002,QAbstractSocket::ShareAddress)){
        qDebug()<<"连接失败";
    }
    //设置缓冲区
    multicastsocket->setSocketOption(QAbstractSocket::MulticastLoopbackOption,0);
    //加入组播组
    if(!multicastsocket->joinMulticastGroup(multiAddr)){
        qDebug()<<"加入组播失败";
    }
    //连接信号与槽
    connect(multicastsocket,SIGNAL(readyRead()),this,SLOT(dataRecieved()));//dataRecieved是接收端的接收函数
           

        我觉得比较重要的有下面几点:

        第一是对于发送端它是不需要加入组播的,当然加入也可以,但是理论上只需要接收端进行加入组播并且选择端口进行监听。发送端只需要向选定的组播地址和组播端口发送数据就可以了。

        第二个是其实组播和正常的Qt局域网通信其实差不太多。别忘记了

if(!multicastsocket->joinMulticastGroup(multiAddr)){...}
           

        这句话,这句话是能接收到数据的关键,也是组播和非组播的区别之一。

上一篇: Qt常用控件