监控互联网连接状态

3
如何在Qt中监控互联网连接状态?我的意思是,我想能够根据互联网连接的存在与否来更改图标为活动/非活动状态。

什么决定了连接是否“存在”? - Joe
1
@Joe,这是专门为你准备的。如果我连接到互联网,连接就存在;如果我没有连接,则不存在。这样说清楚了吗? - smallB
你可以很容易地知道自己的IP地址。但要确定是否连接到互联网就比较困难了,这意味着你需要检查一下是否能够从你所在的位置访问外部网站。这就是为什么我问你是否需要确认你是否拥有活动的网络连接,或者实际上是否连接到可以访问互联网的网络。 - Joe
@Joe,很抱歉,但是你认为的“监控互联网连接状态”是什么意思?别这样,不要表现得像个混蛋。 - smallB
这里没有人在耍流氓。只是说,根据你如何定义“监控互联网连接”,答案会有所不同。 - Joe
2
@Joe 监控互联网连接状态 - 互联网连接状态可能是什么? - smallB
3个回答

1
如果您正在使用QML,则可以从Qt Mobility包中使用NetworkInfo QML element。此外,它还包含一个示例,演示如何检查WLAN连接是否存在。

0

我在使用类似 Winston Rodrigues 和Flatpak 的解决方案时遇到了问题。这个解决方案在我测试的几乎所有电脑上都可以运行,但有一个电脑无法检测到网络连接,而且没有任何错误提示。因此,这是目前在所有情况下都适用于我的解决方案:

bool InternetIsOn()
{
    QUrl host("1.1.1.1"); // put here URL (or IP) of your own website if you have one
    qDebug() << tr("Checking internet connection: connecting to %1 ...").arg(host.toString());

    QTcpSocket* sock = new QTcpSocket(this);
    connect(sock, &QTcpSocket::errorOccurred, this, [](QAbstractSocket::SocketError error) {
        qDebug() << "This error occured during Internet checking:" << error;
    });

    sock->connectToHost(host.toString(), 80);
    bool connected = sock->waitForConnected(3'000);//ms

    if (!connected)
    {
        sock->abort();
        qDebug() << tr("%1 is not reachable. Not connected to the Internet").arg(host.toString());
        return false;
    }

    sock->close();
    qDebug() << tr("Connected to the Internet");
    return true;
}

0
我使用这段代码来检查网络状态。
bool ConnectivityManager::isOnline()
{
    bool retVal = false;
    QNetworkAccessManager nam;
    QNetworkRequest req(QUrl("http://www.google.com"));
    QNetworkReply* reply = nam.get(req);
    QEventLoop loop;
    QTimer timeoutTimer;

    connect(&timeoutTimer, SIGNAL(timeout()), &loop, SLOT(quit()));
    connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));

    timeoutTimer.setSingleShot(true);
    timeoutTimer.start(3000);

    loop.exec();

    if (reply->bytesAvailable())
    {
        retVal = true;
    }

    return retVal;
}

是的,但这可能不是检测工作中的互联网连接的理想解决方案,因为如果使用ping google的方法,您的用户将不得不在每次谷歌搜索之后验证他们不是机器人。https://forum.qt.io/topic/98676/how-to-check-whether-the-computer-connects-the-internet - HBatalha
这是一个相当糟糕的想法。要么Qt需要将其添加到其库中,要么您可以使用在上面的Qt论坛中发布的解决方案。 - Alex Baum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接