Qt 判断网络连接

来源:互联网 发布:佳能9100cdn网络驱动 编辑:程序博客网 时间:2024/05/19 23:13

QProcess*cmd=new QProcess;

cmd->start("ping www.baidu.com");// 等待ping 的结果

while (cmd->waitForFinished())

{

QString result= QString::fromLocal8Bit(cmd->readAll());

qDebug()<< result;

}


3、如果有自己的服务器就ping服务器(前提服务器不会挂),否则就ping一个相对可靠的IP (比如百度),通过看他ping的结果怎么样. 
同时在C++ 实现 ping 功能&& 域名(URL)解析实际 IP地址 这篇博客中用C++实现了 ping的 功能,有兴趣的小伙伴可以看一看,了解一下。

QProcess *cmd = new QProcess;cmd->start("ping www.baidu.com");// 等待ping 的结果while (cmd->waitForFinished()){    QString result = QString::fromLocal8Bit(cmd->readAll());    qDebug() << result;}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

QHostInfo::lookupHost("www.baidu.com", this, SLOT(lookedUp(QHostInfo)));void lookedUp(QHostInfo &host){     qDebug() << host.addresses().first().toString();}//得到IP 地址 就是在互联网上 如果不能得到 就不行
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

4、QNetworkConfigurationManager::isOnline()。 
当然这个只能检查你是否有网络链接,而不能检测你是否连接到互联网。


前言

在Qt中判断网络是否连接有两种方式,其中一种是网络连接但是不一定能上网,可能只是连接了网线或者Wi-Fi,但不一定能够上互联网。另一种判断该网络是否可以连接互联网,两种情况的判别方式有所区别。

正文

第一种:只需要判断网络是否有连接,不一定能上网

这个很简单,直接通过Qt的类QNetworkConfigurationManager自带的函数就可以判断(该方法也适用于Android平台):

bool CommonParameter::isNetWorkOnline(){    QNetworkConfigurationManager mgr;    return mgr.isOnline();}
  • 1
  • 2
  • 3
  • 4
  • 5

第二种:判断是否能上网

这种方式是检查是否连接互联网,原理:通过访问指定的网站,如果能访问成功表示已正常连接。

void CommonParameter::checkNetWorkOnline(){    QHostInfo::lookupHost("www.baidu.com",this,SLOT(onLookupHost(QHostInfo)));}void CommonParameter::onLookupHost(QHostInfo host){    if (host.error() != QHostInfo::NoError) {        qDebug() << "Lookup failed:" << host.errorString();        //网络未连接,发送信号通知        emit sigLookUpHostResult(false);    }    else{        emit sigLookUpHostResult(true);    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

通过静态函数QHostInfo::lookupHost访问指定网络后会将结果返回到槽里面,然后再将结果发送信号出去。

监测网络变化

第一种方法可以获取到当前网络状态,但是如果要实时监测到网络变化,可以通过QNetworkConfigurationManager中的信号来获取,如下

void onlineStateChanged(bool isOnline)
  • 1

官方说明:This signal is emitted when the device changes from online to offline mode or vice versa. isOnline represents the new state of the device. 
The state is considered to be online for as long as allConfigurations(QNetworkConfiguration::Active) returns a list with at least one entry. 
所以,可以通过连接这个信号来实现网络监测,亲测可用。


原创粉丝点击