2010-03-19 11 views
6

Tengo una aplicación que ejecuta una herramienta que requiere conexión a la red. Ahora mi objetivo es verificar si el usuario tiene una conexión de red, si no tiene una, puedo mostrar un error sin proceder más adelante. Si lo hizo, puede seguir trabajando con mi aplicación. Entonces mi necesidad básica es verificar si el usuario tiene una conexión de red o no. ¿Cómo puedo lograr a través de Qt 4.4? Estoy usando Windows XP.Verificación de la conexión de red utilizando Qt 4.4

Respuesta

10

Este código te ayudará.

#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(); 
} 
+1

Me gusta Escribí en mi respuesta: QNetworkInterface solo le dirá que la conexión a alguna red está activa. Puede ser LAN sin acceso a Internet, wlan ad-hoc que conecta su computadora portátil con su móvil, red de máquina virtual, etc. No creo que esa sea la información que el OP está buscando. – chalup

+0

sí ... y eso es suficiente ... hizo el truco ... – liaK

+1

gracias por su código. pero si alguien tiene una máquina virtual instalada en su computadora (como yo), este código fallará. Trataré de arreglarlo si tengo tiempo. –

1

Supongo que por "conexión de red" quiere decir "conexión a Internet", es decir, no le importa LAN o algunas redes ad-hoc entre su computadora de escritorio y su dispositivo móvil.

La manera más fácil es simplemente conectarse al servicio de Internet que su aplicación necesita y dejar que el SO maneje la solicitud de la red. Si obtiene la respuesta, hay una conexión, si la solicitud expira, no hay conexión.

Puede verificar el estado de la interfaz de red a través de QNetworkInterface :: flags(), pero esto no le proporciona la información sobre la red a la que está conectada: la interfaz puede estar activa pero solo conectada a LAN sin internet acceso.

1

con Qt 4.7, puede utilizar QNetworkConfiguration para comprobar las conexiones e incluso a partir de ellos, por ejemplo, en Symbian.

Cuestiones relacionadas