天天看點

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常用控件