QT UDP组播的简单实现

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012372584/article/details/83090380

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

1、服务器加入到组播:

udpSocket = new QUdpSocket(this);
udpSocket->bind(QHostAddress::Any, 9999, QUdpSocket::ShareAddress);
udpSocket->joinMulticastGroup(QHostAddress("224.0.0.2"));

收到消息处理函数:

connect(udpSocket,SIGNAL(readyRead()),this,SLOT(dealMsg()));
void Udpduobo::dealMsg()
{
	char* buf = new char[256];
	memset(buf,0x0,sizeof(buf));

	QHostAddress ip;
	quint16 port;
	udpSocket->readDatagram(buf,sizeof(buf),&ip,&port);

	QString strMsg = QString("[%1::%2]消息收到").arg(ip.toString()).arg(port);
	QMessageBox::information(this,"zubo",strMsg);


    if(buf)
    {
        delete buf,buf = NULL;
    }
}

2、客户端发送消息:

clientsocket = new QUdpSocket(this);
void client::on_btnSend_clicked()
{
    QString str = "zzczzczzczzczzczzczzc!";
    clientsocket->writeDatagram(str.toUtf8(),QHostAddress("224.0.0.2"),9999);
}

开启多个服务器,用客户端发送数据,所有服务器端都会收到客户端发送的数据。

需要注意:

1、发送端既可以加入组播,也可以不加入组播;

2、服务端绑定的ip地址必须是ipv4地址,我用的qt4.8.6,QHostAddress::Any即是ipv4地址;

3、组播ip必须是D类ip,如我使用的224.。。。。。

展开阅读全文

没有更多推荐了,返回首页