最近学习了组播的应用。组播传输:在发送者和每一接收者之间实现点对多点网络连接。如果一台发送者同时给多个的接收者传输相同的数据,也只需复制一份的相同数据包。它能提高了效率。减少了骨干网络出现拥塞的可能性。
因为最近在看视频传输,对于一个客户端的视频,如果通过组播的方式传输给其他端,那么对于传输效率和处理速度是有非常大的帮助的,所以组播在一些特定领域起到了很大的帮助。
那么在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)){...}
这句话,这句话是能接收到数据的关键,也是组播和非组播的区别之一。