Qt 实现Ping功能 获取到具体网络延迟的值(不使用Process)

主要问题: 可以ping 但无法获取RTT

几种Ping是否在线的方法 参考大佬: QT实现ping功能 

在C#中 有自带的Ping类

可以通过发送主机名或IP地址 获取到ICMP状态和回复时间RoundtripTime(RTT)

但在Qt中 没有封装好的Ping类和相关方法(也可能是我没有发现 不会用)

通过QProcess可以调用cmd下发ping命令 再解析命令回复"时间=" 但反复调用cmd再解析 容易引发一些故障 且不能跨平台 不够优雅

通过上边链接里大佬的第三种方法 建立socket连接 可以判断是否连通 但无法获取到RTT

解决办法: 限制socket的超时时间 获取RTT

先简单用文字描述一下思路:

        用定时器 从1ms(或者某个比较小的时间)开始计时

        timerTick中 通过QTcpSocketd  waitForConnected(msec)方法 一次次增大定时器的时间

        直到ping通为止 就能得到当前的RTT

以Ping百度为例

主要代码如下

//首先是定时器的计时时间 也是Socket等待连接的超时时间 我这里从10ms开始了
int timeout = 10;

//定时器
QTimer *tcpTimer;

tcpTimer = new QTimer(this);
connect(tcpTimer,&QTimer::timeout,this,timerTick);
tcpTimer->setSingleShot(true);    //不设定成单次计时也行 记得自己
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值