qt qtcpsocket 识别不到断开

zhenimei100 2017-09-11 08:38:16
1、qt4 的qtcpsocket
2、我已经监听disconnect信号(通过拔网线、断服务器电源验证可以识别到)
3、我已经监听err信号(有时候会有RemoteHostClosedError信号出来,但是不触发disconnect信号)
4、以上两个信号触发时,我通过close socket然后重连,程序没问题。
5、但是现在还有个报错:QSocketNotifier: Invalid socket 11 and type 'Read', disabling...,然后程序段错误了。
上面这个报错,我是这么分析的,服务器write后,触发了我的read信号,然后在我去读的时候,服务器close掉了我的socket,然后等我去read的时候,由于socket已经关闭,所以出错了。可是又觉得不可思议,因为我去read的时候,是有connected可readable判断的。
那这种情况我该怎么办?或者有人遇到过上面的报错信息么?
...全文
2318 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhenimei100 2017-09-18
  • 打赏
  • 举报
回复
read之前调用waitForReadyRead,程序有改善。但是只是时间跑的久点,错误还是存在。 我发现是readall函数没返回引起错误。 那我该怎么办啊?
zhenimei100 2017-09-12
  • 打赏
  • 举报
回复
我网上看到有人在说: 1、服务器主动断开,会触发disconnect信号 2、客户端err,会触发err信号。 3、但是部分客户端err,不会触发以上两种信号。 然后我感觉我是属于第三种,我不知道怎么解决了。网上说的心跳啊、ping啊,都不适合我呀,因为我是去read或者write的时候,发现socket已经不能用了,直接导致我程序崩溃了。 真的没人遇到过: QSocketNotifier: Invalid socket 11 and type 'Read', disabling... 这个报错吗?我感觉肯定有人遇到过啊。我的代码很普通的。
懒懒的吉他手 2017-09-12
  • 打赏
  • 举报
回复
read之前调用waitForReadyRead啊,如果没有执行成功不就说明不能读么,就不要调用后面的read操作饿了
boylafong 2017-09-11
  • 打赏
  • 举报
回复
DISCONNECT 的事时候加个标记, read之前判断标记
懒懒的吉他手 2017-09-11
  • 打赏
  • 举报
回复
小版本号是多少,会不会是个版本BUG导致,我这边试了如果服务器那边主动断掉链接的话是会触发disconnected()的

16,173

社区成员

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

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