qt如何在每個網口廣播發送資訊並且接收資訊
阿新 • • 發佈:2020-12-26
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);
}
}
}
}
}