QT udp通信如何获取本机IP?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT udp通信如何获取本机IP?相关的知识,希望对你有一定的参考价值。
使用QT进行UDP通信编程,由于本地有多个IP地址,想只获取发送数据时用的IP地址,通过socket->localAdderess()方法获取的地址为"0.0.0.0",请教一下该方法为什么获取不到,有什么好的方法没?
参考技术A QString MainWindow::getIP2() //获取ip地址 QList<QHostAddress> list = QNetworkInterface::allAddresses(); foreach (QHostAddress address, list) if(address.protocol() == QAbstractSocket::IPv4Protocol) //我们使用IPv4地址 return address.toString(); return 0;本回答被提问者和网友采纳Qt获取本机ip地址
情景:
最近有个项目需要手机可以与PC进行tcp传输文件,PC做server时在我的电脑可以,在其他电脑时手机连接超时。
查看了端口,防火墙等等问题未能解决。最后发现是qt在获取IP地址时获取错了,获取的是第一个而不是正在使用的。
下面是Qt获取本机正在使用的IP地址:
QString strIpAddress;
QProcess cmd_pro ;
QString cmd_str = QString("ipconfig");
cmd_pro.start("cmd.exe", QStringList() << "/c" << cmd_str);
cmd_pro.waitForStarted();
cmd_pro.waitForFinished();
QString result = cmd_pro.readAll();
qDebug() << result;
QString pattern("[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}");
QRegExp rx(pattern);
int pos = 0;
bool found = false;
while((pos = rx.indexIn(result, pos)) != -1){
QString tmp = rx.cap(0);
//跳过子网掩码 eg:255.255.255.0
if(-1 == tmp.indexOf("255")){
if(strIpAddress != "" && -1 != tmp.indexOf(strIpAddress.mid(0,strIpAddress.lastIndexOf(".")))){
found = true;
break;
}
strIpAddress = tmp;
}
pos += rx.matchedLength();
}
qDebug()<<"ip: " << strIpAddress;
参考链接:https://blog.csdn.net/JakeLinfly/article/details/96590688
以上是关于QT udp通信如何获取本机IP?的主要内容,如果未能解决你的问题,请参考以下文章