查看完整版本: [-- QNetworkAccessManager post 一个http请求,返回QIODevice::read (QDisabledNetworkReply): device not open --]

QTCN开发网 -> Qt基础编程 -> QNetworkAccessManager post 一个http请求,返回QIODevice::read (QDisabledNetworkReply): device not open [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

ihunteri 2017-04-17 14:13

QNetworkAccessManager post 一个http请求,返回QIODevice::read (QDisabledNetworkReply): device not open


我用 QNetworkAccessManager post  一个http请求,返回后,收到的QNetworkReply* reply,去readAll()的时候,返回QIODevice::read (QDisabledNetworkReply): device not open
这是什么问题?

ihunteri 2017-04-17 15:15
之前post http请求都是正常的,但是断了一次网以后,去readAll()的时候,返回QIODevice::read (QDisabledNetworkReply): device not open

never_forget 2017-04-17 17:04
客户端在发起 HTTP 请求的时候其实是和服务器建立了连接的,如果程序断网了,服务器会保留这个连接一段时间,但是客户端没做处理就直接断了,所以客户端在第二次发起请求会比第一次快(短时间内,长时间服务器也放弃了这个连接),客户端当然一脸懵啦,它找不到连接,你想到这个连接通道读取东西,没戏哦~~~~~


ihunteri 2017-04-18 09:12
never_forget:客户端在发起 HTTP 请求的时候其实是和服务器建立了连接的,如果程序断网了,服务器会保留这个连接一段时间,但是客户端没做处理就直接断了,所以客户端在第二次发起请求会比第一次快(短时间内,长时间服务器也放弃了这个连接),客户端当然一脸懵啦,它找不到连接,你想到这个连 .. (2017-04-17 17:04) 

那我应该怎么解决?

never_forget 2017-04-18 15:22
ihunteri:那我应该怎么解决? (2017-04-18 09:12) 

再发一次请求呗,网络正常就不要考虑这种断线重连的问题了哦...

stlcours 2017-04-19 21:26
never_forget:客户端在发起 HTTP 请求的时候其实是和服务器建立了连接的,如果程序断网了,服务器会保留这个连接一段时间,但是客户端没做处理就直接断了,所以客户端在第二次发起请求会比第一次快(短时间内,长时间服务器也放弃了这个连接),客户端当然一脸懵啦,它找不到连接,你想到这个连 .. (2017-04-17 17:04) 

那客户端怎么知道中间断过没有??

never_forget 2017-04-20 08:47
stlcours:那客户端怎么知道中间断过没有?? (2017-04-19 21:26)

发送之前 用 isOpen() 函数检测套接字是不是可用,可用就直接用,不能就先初始化一下下~~~


stlcours 2017-04-20 16:30
never_forget:发送之前 用 isOpen() 函数检测套接字是不是可用,可用就直接用,不能就先初始化一下下~~~
[表情] (2017-04-20 08:47) 

你说的是哪个类的isOpen? QNetworkAccessManager 和 QAbstractSocket 里都没有找到。

stlcours 2017-04-20 16:31
never_forget:发送之前 用 isOpen() 函数检测套接字是不是可用,可用就直接用,不能就先初始化一下下~~~
[表情] (2017-04-20 08:47) 

找到了,是QIODevice 的,谢谢。可是文档为啥没说覆盖了这个函数?

longlong123 2018-03-19 18:36
stlcours:找到了,是QIODevice 的,谢谢。可是文档为啥没说覆盖了这个函数? (2017-04-20 16:31) 

请问最后是怎么解决这个问题的,是不是QNetworkManger 断网不论是不是网络恢复都会返回这个错误

return 2018-05-07 15:21
有示例代码吗?      

lijian161 2018-05-24 20:50
今天遇到了这个问题,请问楼主怎么解决的

jigetage 2018-05-26 16:47
stlcours:找到了,是QIODevice 的,谢谢。可是文档为啥没说覆盖了这个函数? (2017-04-20 16:31) 

QNetworkReply类有isOpen()函数


查看完整版本: [-- QNetworkAccessManager post 一个http请求,返回QIODevice::read (QDisabledNetworkReply): device not open --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled