tcpsocket readall(),是阻塞的吗?如果不是,如何判断读全了?

weixin_38058660 2019-09-19 12:04:50
write是不是可以写任意字节?比如发送了20480字节,接受方readall()好像不能读全啊?应该怎么读?
...全文
751 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38060006 2019-09-19
  • 打赏
  • 举报
回复
TCP 传输是数据流,无所谓全与不全要接受所有你发送的数据,需要靠你自己的协议来判断
weixin_38069120 2019-09-19
  • 打赏
  • 举报
回复
readall 这一步本身是阻塞的,但数据全不全不一定,你一定要自己继续readall,直到你认为完整了。
weixin_38082806 2019-09-19
  • 打赏
  • 举报
回复
谢谢楼上的回答!socket.write(qBytearray)一次好像只能write 65536左右字节吧,readall应该也如此吧
weixin_38087237 2019-09-19
  • 打赏
  • 举报
回复
首先你要读的数据长度你肯定知道,然后调用read(char *, qint64)函数读取数据,这个函数会返回已经读取的字节数。你不断的读取数据,每次读取后把读取到的长度累加起来,直到和你要读的数据长度一样就行了。当然还需要考虑超时问题,比如3s后超时,如果还没有读全认为读取失败了。
weixin_38088844 2019-09-19
  • 打赏
  • 举报
回复
readall不是阻塞的,它会直接返回当前收到的所有数据,所以你不能write后直接readall,甚至可能什么也收不到,因为这时候,对方可能还没发送,需要等待tcpsocket 的信号readyRead触发后在readall

473

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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