Qt 判断网络连接

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. 
所以,可以通过连接这个信号来实现网络监测,亲测可用。


  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值