首页| 论坛| 消息

标题:tcpsocket readall(),是阻塞的吗?如果不是,如何判断读全了?
作者:hpplel
日期:2018-06-11 16:57
内容:

write是不是可以写任意字节?
比如发送了20480字节,接受方readall()好像不能读全啊?应该怎么读?


#1 [dbzhang800 06-11 19:17]
TCP 传输是数据流,无所谓全与不全
要接受所有你发送的数据,需要靠你自己的协议来判断
#2 [stlcours 06-11 22:15]
readall 这一步本身是阻塞的,但数据全不全不一定,你一定要自己继续readall,直到你认为完整了。
#3 [hpplel 06-13 16:41]
谢谢楼上的回答!
socket.write(qBytearray)一次好像只能write 65536左右字节吧,readall应该也如此吧
#4 [songhuirong1 06-14 21:41]
首先你要读的数据长度你肯定知道,然后调用read(char *, qint64)函数读取数据,这个函数会返回已经读取的字节数。你不断的读取数据,每次读取后把读取到的长度累加起来,直到和你要读的数据长度一样就行了。当然还需要考虑超时问题,比如3s后超时,如果还没有读全认为读取失败了。
#5 [yanwuyue 06-16 16:24]
readall不是阻塞的,它会直接返回当前收到的所有数据,
所以你不能write后直接readall,甚至可能什么也收不到,
因为这时候,对方可能还没发送,
需要等待tcpsocket 的信号readyRead触发后在readall

回复 发表
主题 版块