Verfiying the network connection using Qt 4.4

后端 未结 3 1956
后悔当初
后悔当初 2020-12-17 01:34

I have an application which runs a tool that requires network connection. Now my aim is to check whether the user has a network connection, if he don\'t have one, i can stra

相关标签:
3条回答
  • 2020-12-17 02:08

    this code will help you.

    #include <QtCore/QCoreApplication>
    #include <QtNetwork/QNetworkInterface>
    
    bool isConnectedToNetwork()
    {
        QList<QNetworkInterface> ifaces = QNetworkInterface::allInterfaces();
        bool result = false;
    
        for (int i = 0; i < ifaces.count(); i++)
        {
            QNetworkInterface iface = ifaces.at(i);
            if ( iface.flags().testFlag(QNetworkInterface::IsUp)
                 && !iface.flags().testFlag(QNetworkInterface::IsLoopBack) )
            {
    
    #ifdef DEBUG
                // details of connection
                qDebug() << "name:" << iface.name() << endl
                        << "ip addresses:" << endl
                        << "mac:" << iface.hardwareAddress() << endl;
    #endif
    
                // this loop is important
                for (int j=0; j<iface.addressEntries().count(); j++)
                {
    #ifdef DEBUG
                    qDebug() << iface.addressEntries().at(j).ip().toString()
                            << " / " << iface.addressEntries().at(j).netmask().toString() << endl;
    #endif
    
                    // we have an interface that is up, and has an ip address
                    // therefore the link is present
    
                    // we will only enable this check on first positive,
                    // all later results are incorrect
                    if (result == false)
                        result = true;
                }
            }
    
        }
    
        return result;
    }
    
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
        QTextStream output(stdout);
    
    
        output << endl << "Connection Status: " << ((isConnectedToNetwork())?"Connected":"Disconnected") << endl;
    
    
        return a.exec();
    }
    
    0 讨论(0)
  • 2020-12-17 02:22

    I assume that by "network connection" you mean "internet connection", i.e. you don't care about LAN or some ad-hoc networks between your desktop and mobile.

    The easiest way is just to connect to the internet service your application needs and let OS handle the network request. If you get the reply, there is a connection, if the request times out, there is no connection.

    You can check state of network interface through QNetworkInterface::flags(), but this doesn't give you the information about the network the interface is connected to: the interface might be up, but connected only to LAN without internet access.

    0 讨论(0)
  • 2020-12-17 02:32

    With Qt 4.7, you can use QNetworkConfiguration for checking connections and even starting them e.g. on Symbian.

    0 讨论(0)
提交回复
热议问题