我正在尝试使用Qt库学习网络编程。
作为练习,我正在尝试查找google的IP地址:
#include <QApplication>
#include <QtNetwork>
#include <iostream>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QDnsLookup lookup(QDnsLookup::ANY, "http://www.google.com");
lookup.lookup();
while (!lookup.isFinished())
{
// Just wait.
}
auto records = lookup.hostAddressRecords();
for (auto record : records)
{
std::cout << record.timeToLive() << "; " <<
record.value().toString().toStdString() << '\n';
}
return 0;
}
但是,查找永远不会完成,并且
lookup.isFinished()
永远不会返回true。我试图阅读QDnsLookup的文档,但被卡住了。 最佳答案
QDnsLookup是异步API,它依赖于运行的Qt事件循环来更新其状态。因此,您要么需要强制Qt来处理等待循环中的事件:
while (!lookup.isFinished())
{
QApplication::processEvents();
}
或者,您也可以按照Qtish的方式进行操作,然后实际运行应用程序并处理QDnsLookup的
finished
信号(lambda最好调用命名函数,但这只是一个示例):int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QDnsLookup lookup(QDnsLookup::ANY, "www.google.com");
QObject::connect(&lookup, &QDnsLookup::finished, [&lookup]() {
auto records = lookup.hostAddressRecords();
for (auto record : records)
{
std::cout << record.timeToLive() << "; " <<
record.value().toString().toStdString() << '\n';
}
QCoreApplication::quit(); // we don't want to do anything else
});
lookup.lookup();
return a.exec();
}
(请注意,您应该只使用
www.google.com
,因为http://www.google.com
不是有效的域名。)关于c++ - 如何使用QDnsLookup类查找网站的IP地址?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41144771/