• 558阅读
  • 8回复

[讨论]QNetworkAccessManager post 一个http请求,返回QIODevice::read (QDisabledNetworkReply): device not open [复制链接]

上一主题 下一主题
离线ihunteri
 

只看楼主 倒序阅读 楼主  发表于: 04-17

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

只看该作者 1楼 发表于: 04-17
之前post http请求都是正常的,但是断了一次网以后,去readAll()的时候,返回QIODevice::read (QDisabledNetworkReply): device not open
离线never_forget

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

离线ihunteri

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

那我应该怎么解决?
离线never_forget

只看该作者 4楼 发表于: 04-18
回 ihunteri 的帖子
ihunteri:那我应该怎么解决? (2017-04-18 09:12) 

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

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

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

只看该作者 6楼 发表于: 04-20
回 stlcours 的帖子
stlcours:那客户端怎么知道中间断过没有?? (2017-04-19 21:26)

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

离线stlcours

只看该作者 7楼 发表于: 04-20
回 never_forget 的帖子
never_forget:发送之前 用 isOpen() 函数检测套接字是不是可用,可用就直接用,不能就先初始化一下下~~~
[表情] (2017-04-20 08:47) 

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

只看该作者 8楼 发表于: 04-20
回 never_forget 的帖子
never_forget:发送之前 用 isOpen() 函数检测套接字是不是可用,可用就直接用,不能就先初始化一下下~~~
[表情] (2017-04-20 08:47) 

找到了,是QIODevice 的,谢谢。可是文档为啥没说覆盖了这个函数?
快速回复
限100 字节
 
上一个 下一个