最近遇到这个需求,但是发现一个问题,主机可以使用TCP连接但是使用HTTP连接超时(ping超时),于是需要用QT实现ping命令。

网上看了一下,发现竟然没有实现!于是只能自己实现了!

首先需要说明的是,我肯定不希望用QProcess执行"ping.exe”实现,不能跨平台不说,也不优雅。

在网上看到某段TCP代码,给了我很大的启发,原帖在这里,这段代码思路不错,可惜不符合我的要求!

因为我发现实测某些主机可以使用TCP连接但是使用HTTP连接超时(ping超时)。

//判断IP地址及端口是否在线static bool IPLive(QString ip, int port, int timeout = 1000) {QTcpSocket tcpClient;tcpClient.abort();tcpClient.connectToHost(ip, port);//100毫秒没有连接上则判断不在线return tcpClient.waitForConnected(timeout);}
//判断是否通外网static bool IsWebOk() {//能接通百度IP说明可以通外网return IPLive("115.239.211.112", 80);}

于是我把上述代码修改为http请求,中间走了不少弯路,不断测试调整,这里直接把最终的代码分享出来吧。

//author:autumoon
//联系QQ:4589968
//日期:2020-12-03//判断主机是否在线static bool IsHostOnline(QString strHostName, int nTimeoutmSeconds = 2000);//判断是否通外网,能连接百度IP说明可以通外网static bool IsWebOk(){return IsHostOnline("202.108.22.5", 2000);}

实现:

//author:autumoon
//联系QQ:4589968
//日期:2020-12-03
bool HttpDownload::IsHostOnline(QString strHostName, int nTimeoutmSeconds)
{QNetworkRequest request(strHostName);request.setRawHeader("Content-Type", "charset='utf-8'");request.setRawHeader("Content-Type", "application/json");QNetworkAccessManager* naManager = new QNetworkAccessManager;QEventLoop eventloop;QTimer timer;timer.singleShot(nTimeoutmSeconds, &eventloop, SLOT(quit()));timer.start();QNetworkReply* reply = naManager->get(request);QMetaObject::Connection conRet = QObject::connect(reply, SIGNAL(finished()), &eventloop, SLOT(quit()));Q_ASSERT(conRet);eventloop.exec(QEventLoop::ExcludeUserInputEvents);if (!timer.isActive()){//超时,未知状态disconnect(reply, SIGNAL(finished()), &eventloop, SLOT(quit()));reply->abort();reply->deleteLater();return false;}if (reply->error() != QNetworkReply::NoError){reply->abort();reply->deleteLater();return false;}bool bRes = reply->readAll().length() > 0;reply->abort();reply->deleteLater();return bRes;
}

成功解决问题!使用了定时器解处理超时的问题!执行本函数相当于执行ping,而且跨平台!

Qt实现ping命令检测主机是否在线相关推荐

  1. ping 计算机名判断机器是否在线,通过ping命令检测主机的存活性

    判断所有的业务系统中主机的存活性ping 问题描述:现在有一上线项目,用的环境为vsphere 虚拟化技术.由于不能随时判断各虚拟主机的存活性,保证业务系统的正常运行,现在需要编写一个脚本判断主机的存 ...

  2. Tool之ping:如何使用ping命令检测电脑网络故障图文教程

    Tool之ping:如何使用ping命令检测电脑网络故障图文教程 目录 如何使用ping命令检测电脑网络故障图文教程 1.首先点击开始→运行→输入cmd→进入命令提示符窗口 2.输入ping 127. ...

  3. 基于PING命令的主机探测

    今天继续给大家介绍渗透测试相关知识,本文主要内容是基于PING命令的主机探测. 免责声明: 本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负! 一.ping与t ...

  4. Ping命令检测网站运行状态

    Ping命令检测网站运行状态 最近,小编在项目中遇到一个问题,检测服务上网站的运行状况,其中,用到了Ping命令来测试 Ping的是什么?IP地址或者域名 DNS:正向解析,将域名转换成IP地址,域名 ...

  5. ping命令 ——测试主机间网络连通性

    ping命令 --测试主机间网络连通性 一.ping命令 1.概述 2.格式 3.常用参数 4.实例 ①.检查连通性 ②.仅仅连ping 5次后停止 ③.设置ping 5 次,每次间隔0.5秒 ④.p ...

  6. 使用ping命令检测设备在线

    使用ping命令实时检测局域网设备是否在线 #include<stdio.h> #include <unistd.h> #include <stdlib.h> #i ...

  7. linux+ping网络脚本,使用ping命令检测整个网段IP的网络状态的shell脚本(图文)

    通过ping网段中的IP地址,根据返回的状态信息,判断主机的网络状态. 下面分享两个可以实现这个功能的shell脚本. 脚本1, 复制代码 代码示例: #!/bin/sh # Ping网段所有IP # ...

  8. 通过ping命令测试主机与虚拟机之间是否连通

    一.查询本机.虚拟机Windows IP地址 1.本机的Windows IP地址 方法一:控制面板>网络和Internet>网络和共享中心>更改适配器设置>以太网>详细信 ...

  9. 使用Ping命令解析主机名解析出来的是IPv6

    如果你经常使用ping命令,并身处局域网,那么你肯定会有这样一个疑问:Ping计算机名为何是IPv6地址? 问这个问题的人很少见,大多都是对网络知识稍有了解的人,所以才会闻到关于ping的问题,而且在 ...

最新文章

  1. 互联网寒冬裁员潮,这些人可能有点慌!
  2. asp.netkg117《计算机网络》教学网站的设计与实现,《计算机网络》教学网站的设计与实现 毕业论文.doc...
  3. SAP OData etag flag setting in metadata MPC_EXT
  4. python3闭包通俗解释_Python|闭包、装饰器,简单的实例,通俗的理解
  5. 电脑打字学习_寒假就这样做!即不让孩子烦,还能让他有进步,开学就能迅速进入学习状态!...
  6. ubuntu vim中输入中文
  7. Python随笔(二)GIL
  8. python撤回快捷键大全_Python基础之PyCharm快捷键大全
  9. 兼容pmbus的降压DC/DC模块提供更高的输出电流
  10. 逻辑函数的化简方法——数电第二章学习
  11. cpu多开测试软件,教你用多核CPU多开畅玩大型3D游戏
  12. linux误删除文件恢复
  13. 计算机方面毕业生怎样写简历
  14. 移动端中的vMin和vMax
  15. python爬虫实战:之爬取京东商城实例教程!(含源代码)
  16. macos系统升级到big sur以后safari浏览器崩溃怎么办?
  17. golang profiling
  18. 卫星各个波段的说明及用途(C/Ku/Ka/S/L)
  19. 花了5000元改了一个带触摸板的小红点键盘
  20. php 微信公众号客服,微信公众平台开发 多客服

热门文章

  1. 深入理解Linux 进程管理之CFS负载均衡
  2. bcb image 动态大小_实战|使用CSS Paint API动态创建与分辨率无关的可变背景
  3. sqlyog-数据库同步
  4. Java实现最小生成树算法(Prim算法)
  5. Tree Star FlowJo X win mac 安装教程及下载
  6. 24小时超长续航! 惠普战X锐龙版评测:真正的商务之友
  7. 计算机检测维修与数据恢复国赛培训班招生
  8. 什么技术水平,才能拿到腾讯T9(原T3.1)offer,“8+1”的技术维度总结
  9. 计算机试题高考作文阅卷组对考生,福建省建阳一中高三第一次月考语文试卷com 高考(11页)-原创力文档...
  10. 精密压接之曲柄连杆模型计算(含MATLAB仿真+博途SCL源代码)