1. 程式人生 > 其它 >qt如何在每個網口廣播發送資訊並且接收資訊

qt如何在每個網口廣播發送資訊並且接收資訊

技術標籤:QTqt

void SearchDialog::setRemainTime(int time)
{
    remainTime = time;
    searchResult = 0;
    QString strText = tr("Found %1 NPort(s) ,remain timeout = %2 second(s) ").arg(searchResult).arg(remainTime);
    ui->findLabel->setText(strText);
    _timer.start(1000);
    QByteArray byteArr =
QByteArray("\x01\x00\x00\x08\x00\x00\x00\x00",8); QHash<QString, QUdpSocket*>::const_iterator i; for(i=mUdpClients.constBegin();i!=mUdpClients.constEnd();i++){ QUdpSocket *client = i.value(); QString broadIp = i.key(); client->writeDatagram(byteArr, QHostAddress
(broadIp),4800); } } void SearchDialog::initSocket() { QList<QNetworkInterface> ifaceList = QNetworkInterface::allInterfaces(); //獲取系統裡所有的網路介面 foreach(QNetworkInterface intf, ifaceList){ //遍歷所有介面 foreach(QNetworkAddressEntry entry, intf.addressEntries()){ //intf.addressEntries()返回此介面擁有的IP地址列表及其相關的網掩碼和廣播地址。
if(entry.ip().isLoopback() == true){ continue; } else{ if(entry.ip().protocol() !=QAbstractSocket::IPv4Protocol) continue; else{ QString name = intf.humanReadableName(); QString strIp = entry.ip().toString(); hash.insert(name, strIp); udpClient = new QUdpSocket(this); QHostAddress networkcardip(strIp); udpClient->bind(networkcardip, 4800,QAbstractSocket::DontShareAddress); connect(udpClient,SIGNAL(readyRead()), this,SLOT(readPendingDatagrams())); mUdpClients.insert(entry.broadcast().toString(),udpClient); } } } } }