2010-03-19 5 views
6

네트워크 연결이 필요한 도구를 실행하는 응용 프로그램이 있습니다. 이제 내 목표는 사용자가 네트워크에 연결되어 있는지 확인하는 것입니다. 사용자가 네트워크에 연결되어 있지 않으면 직접 진행하지 않고 곧바로 오류를 표시 할 수 있습니다. 그가 가지고 있다면, 그는 내 신청서로 계속 일할 수 있습니다. 그래서 내 기본 필요는 사용자가 네트워크에 연결되어 있는지 여부를 확인하는 것입니다. Qt 4.4를 통해 어떻게 얻을 수 있습니까? Windows XP를 사용하고 있습니다.Qt 4.4를 사용하여 네트워크 연결 확인

답변

10

이 코드는 도움이됩니다.

Qt는 4.7로
#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

나는 내 대답에 썼다 : QNetworkInterface는 당신에게 단지 일부 네트워크에 대한 연결이 있음을 말해 줄 것이다. 인터넷 액세스가없는 LAN, 랩톱과 모바일을 연결하는 ad-hoc wlan, 가상 컴퓨터 네트워크 등이있을 수 있습니다. OP가 찾는 정보는 아닌 것 같습니다. – chalup

+0

옙 ... 그리고 그 정도면 .. 트릭을 ... – liaK

+1

코드에 감사드립니다. 누군가 내 컴퓨터처럼 가상 컴퓨터를 설치하면이 코드는 실패합니다. 시간이 있으면 고칠 것입니다. –

1

"네트워크 연결"이란 "인터넷 연결"을 의미합니다. 즉, 데스크톱과 모바일 간의 LAN 또는 일부 애드혹 네트워크에는 신경 쓰지 않아도됩니다.

가장 쉬운 방법은 응용 프로그램에 필요한 인터넷 서비스에 연결하고 OS가 네트워크 요청을 처리하도록하는 것입니다. 회신을 받으면 연결이 있습니다. 요청 시간이 초과되면 연결이 없습니다.

QNetworkInterface :: flags()를 통해 네트워크 인터페이스의 상태를 확인할 수 있지만 인터페이스가 연결된 네트워크에 대한 정보는 제공하지 않습니다. 인터페이스는 작동 중일 수 있지만 인터넷이없는 LAN에만 연결됩니다 접속하다.

1

, 당신은 연결을 확인하고도, 예를 들어를 시작하기위한 QNetworkConfiguration을 사용할 수 있습니다 심비안에.