Qt 如何判断网络是否断开

jxliuyunpeng 2011-04-06 09:48:49
如题
...全文
4462 28 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
U_冰糖 2013-08-02
  • 打赏
  • 举报
回复
引用 11 楼 never1gone110 的回复:
QHostInfo::lookupHost("www.baidu.com", this, SLOT(lookedUp(QHostInfo))); void lookedUp(QHostInfo &host) { qDebug() << host.addresses().first().toString(); } 得到IP 地址 就是在互联网上 如果不能得到 就不行 用个定时器 每五秒钟一次 就OK了
发现了这个地址就能判断能不能ping通吗?不能把!!!
寒山-居士 2012-08-21
  • 打赏
  • 举报
回复
不知道这个问题修复掉了么???[Quote=引用 21 楼 的回复:]

引用 15 楼 never1gone110 的回复:

再次补充 QNetworkConfigurationManager::isOnline()
PC 上OK可以判断 在烧录到嵌入式 板子中 不Ok 无法判断。

QNetworkConfigurationManager需要一定的后端支持
在linux上需要network manager或者connman,否则不能确保判断正确……
[/Quote]
hsb545999234 2012-03-22
  • 打赏
  • 举报
回复
没写过具体这样实例的 就不要瞎说 行吗?若服务端程序不让动,客户端这变边 若直接网卡禁用 是可以检测到掉线的 若直接拔网线 就检测不到了!!!!!
wangxixicheng 2012-01-10
  • 打赏
  • 举报
回复
QNetworkConfigurationManager::isOnline()PC上页不能正常,不知道为什么在我的电脑上返回值正确,在别人的电脑上无论网络怎样都是false,请问你是怎么解决的?
gemfield 2011-05-05
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 zhu_xz 的回复:]

引用 20 楼 gemfield 的回复:

直切拔掉网线能检测到吗?

不能
因为TCP协议不知道底层的物理链接情况,只能通过超时来判断是否链接断开
[/Quote]
这就是我想要的答案,多谢
zhu_xz 2011-04-29
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 gemfield 的回复:]

直切拔掉网线能检测到吗?
[/Quote]
不能
因为TCP协议不知道底层的物理链接情况,只能通过超时来判断是否链接断开
zhu_xz 2011-04-29
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 hejunjunfly 的回复:]

返回接口和地址怎么看??只有网卡地址和IP地址这些,怎么判断?
[/Quote]
有地址(不是127.*那个)就说明有网络链接......
但就像我先前说的,单凭这一点不能判断是否链接到了互联网
zhu_xz 2011-04-29
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 never1gone110 的回复:]

再次补充 QNetworkConfigurationManager::isOnline()
PC 上OK可以判断 在烧录到嵌入式 板子中 不Ok 无法判断。
[/Quote]
QNetworkConfigurationManager需要一定的后端支持
在linux上需要network manager或者connman,否则不能确保判断正确

我过几天有时间的时候会看看如何改进这一点
gemfield 2011-04-28
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 yaotong1979 的回复:]

挂载QTcpsocket.statechanged()信号,就可以,我刚试了
[/Quote]
直切拔掉网线能检测到吗?
影风骑士 2011-04-26
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 zhu_xz 的回复:]
开个定时器,timeout了就给对方发个TCP包过去,对方收到就回复一下
如果这边接收不到回复,就可以猜测是断网了

如果你只是检测是否有网路链接,也可以用QNetworkInterface,燃后看看返回的接口/地址就好了
[/Quote]
这是比较正确的做法,发送心跳报文,是判断是否联网的主要依据
jxliuyunpeng 2011-04-25
  • 打赏
  • 举报
回复
其实我是要连接我自己的服务器的,其实上面的问题我问的不太准确。应该说如何判断与服务器断开,也就是判断服务器的状态
hejunjunfly 2011-04-22
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 zhu_xz 的回复:]
引用 7 楼 jxliuyunpeng 的回复:

怎么复发心跳包啊

开个定时器,timeout了就给对方发个TCP包过去,对方收到就回复一下
如果这边接收不到回复,就可以猜测是断网了

如果你只是检测是否有网路链接,也可以用QNetworkInterface,燃后看看返回的接口/地址就好了
[/Quote]
返回接口和地址怎么看??只有网卡地址和IP地址这些,怎么判断?
yaotong1979 2011-04-22
  • 打赏
  • 举报
回复
挂载QTcpsocket.statechanged()信号,就可以,我刚试了
never1gone110 2011-04-22
  • 打赏
  • 举报
回复
再次补充 QNetworkConfigurationManager::isOnline()
PC 上OK可以判断 在烧录到嵌入式 板子中 不Ok 无法判断。
x_light 2011-04-22
  • 打赏
  • 举报
回复
4.7里直接有函数判断
never1gone110 2011-04-22
  • 打赏
  • 举报
回复
补充一点 对于上面的发包请求要慎重, 若果你是为一个很大的群体的软件再做这个动作, 如果量很集中的达到一定程度, 每几秒就要去发个TCP包, 可能会构成潜伏的DDOS 攻击, 目标服务器要去回应你这些无聊的TCP请求。。。。。
never1gone110 2011-04-22
  • 打赏
  • 举报
回复
也可以这样

QProcess *cmd

cmd->start("ping www.baidu.com");

qDebug() << cmd->readAll() ;

就是看他ping的结果怎么样.
never1gone110 2011-04-22
  • 打赏
  • 举报
回复
QHostInfo::lookupHost("www.baidu.com", this, SLOT(lookedUp(QHostInfo)));

void lookedUp(QHostInfo &host)
{
qDebug() << host.addresses().first().toString();
}

得到IP 地址 就是在互联网上 如果不能得到 就不行 用个定时器 每五秒钟一次 就OK了
zhu_xz 2011-04-22
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 jxliuyunpeng 的回复:]

怎么复发心跳包啊
[/Quote]
开个定时器,timeout了就给对方发个TCP包过去,对方收到就回复一下
如果这边接收不到回复,就可以猜测是断网了

如果你只是检测是否有网路链接,也可以用QNetworkInterface,燃后看看返回的接口/地址就好了
zhu_xz 2011-04-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jxliuyunpeng 的回复:]

Qt 4.4.0好像没有QNetworkConfigurationManager这个类
[/Quote]
这个是在Qt 4.7引入的;)
加载更多回复(7)

16,819

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧