TJ1*_*TJ1 6 c++ ip qt ipconfig
我想在QT中获取计算机的本地IP地址(IPV4).我找到了以下代码:
QNetworkInterface *inter = new QNetworkInterface();
QList<QHostAddress> list;
list=inter->allAddresses();
QString str;
for (int i = 0; i < list.size(); ++i) {
str = list.at(i).toString();
}
Run Code Online (Sandbox Code Playgroud)
通过循环我可以看到有许多值(ip)list,其中一个是我ipconfig在命令窗口输入的实际本地IP地址.
我的问题是如何区分ip地址和所有的ip list?
roh*_*npm 11
PC通常有多个IP地址.实际上并没有"本地"IP地址这样的东西; 连接到某个远程主机时使用的IP地址至少取决于本地路由表(可能在任何时候都会发生剧烈变化,例如在启动/停止VPN软件时).
在我看来,将IP视为仅在远程网络环境中有效更有意义,例如"这是我在互联网上连接到此主机时使用的本地IP地址;但这是我用来通过我公司的VPN连接到这台主机的本地IP地址".
如果你想找到可用于通用互联网连接的本地IP地址,我所知道的最准确的方法就是对代表主机(以及具有高可靠性的主机)进行连接测试!
QTcpSocket socket;
socket.connectToHost("8.8.8.8", 53); // google DNS, or something else reliable
if (socket.waitForConnected()) {
qDebug()
<< "local IPv4 address for Internet connectivity is"
<< socket.localAddress();
} else {
qWarning()
<< "could not determine local IPv4 address:"
<< socket.errorString();
}
Run Code Online (Sandbox Code Playgroud)
注意:上面的示例是阻止,如果您的应用具有UI,您可能希望重写它以使用信号和插槽.