QT 加入组播操作
#include <math.h>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QNetworkAddressEntry>
#include <QNetworkInterface>
private:
const QString CONFIG_PATH = "./config.xml";
const QString UDP_STR = "udp";
const QString TCP_STR = "tcp";
const QString SQL_STR = "sql";
const QString PACK_STR = "package";
const QString MULT_IP = "multicastIp";
const QString PORT = "port";
const QString LOCAL_IP = "localIp";
const QString LOCAL_PORT = "localPort";
const QString dbIp = "dbIp";
const QString userName="userName";
const QString Password="Password";
const QString dbName="dbName";
QByteArray _onePackage; //一个整包数据
QUdpSocket _multicastUdp;
QHostAddress localIp;
uint localPort;
uint _port;
QHostAddress _multIp;
QDomElement _packElement;
QString dbip,username,password,dbname;
void NetworkRcv::_init()
{
if(!_multicastUdp.bind(QHostAddress::AnyIPv4, localPort, QUdpSocket::ShareAddress)){
//Mymethod::record(QString("mainNode udp bind failed:ip=%1,port=%2!").arg(localIp.toString()).arg(localPort));
}else{
//Mymethod::record(QString("mainNode udp bind success:port=%1").arg(localPort));
connect(&_multicastUdp,SIGNAL(readyRead()),this,SLOT(dataReceived())); //连接接收信号槽
connect(this,SIGNAL(trackData(QByteArray)),this,SLOT(trackslot(QByteArray)));
connect(this,SIGNAL(parseData()),this,SLOT(parseDataSlot()));
QList<QNetworkInterface> list = QNetworkInterface::allInterfaces(); //获取系统里所有的网络接口
foreach(QNetworkInterface intf, list){ //遍历所有接口
foreach(QNetworkAddressEntry entry, intf.addressEntries()){
if (entry.broadcast() != QHostAddress::Null && entry.ip() != QHostAddress::LocalHost && entry.ip().protocol() == QAbstractSocket::IPv4Protocol){
if(localIp == entry.ip()){
//Mymethod::record(QString("udp network card bind success:ip=%1").arg(localIp.toString()));
_multicastUdp.setMulticastInterface(intf);
}
}
}
}
if(_multicastUdp.joinMulticastGroup(_multIp)) //加入组播组
{
//Mymethod::record(QString("join multicast success:%1").arg(_multIp.toString()));
_multicastUdp.setSocketOption(QAbstractSocket::ReceiveBufferSizeSocketOption, 1024*1024*8); //设置缓冲区
}else{
//Mymethod::record(QString("join multicast failed:%1!").arg(_multIp.toString()));
}
}
}