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()));
      }
    }
  }
posted @ 2021-07-16 00:46  Azuki_op  阅读(901)  评论(0)    收藏  举报