如何正确确定最终的输入已达成一QTCPSocket?
-
26-09-2019 - |
题
我有以下代码读取QTCPSocket:
QString request;
while(pSocket->waitForReadyRead())
{
request.append(pSocket->readAll());
}
这个问题码是,它读取所有的输入,然后暂停结束时30秒。(这是默认的超时。)
什么是适当的方法来避免超时长和检测,结束输入已经达到?(答复,避免信号是首选,因为这是应该发生的事情同步,在一线。)
解决方案
可以肯定的唯一方法是当你接收的字节你期待的确切数目。这通常是通过在数据包的开始发送数据的大小来完成。阅读,然后再不断循环,直到你得到这一切。另一种方法是使用一个前哨,特定系列标记数据的末尾的字节但这通常会混乱。
其他提示
如果你处理这样的情况HTTP响应,其中不包含内容的长度,你知道另一端将关闭连接一旦发送数据,有一个替代解决方案。
- 使用的插座。setReadBufferSize,以确保有足够的阅读缓冲区的所有数据,可以发送。
- 叫座。waitForDisconnected等待的远程端关闭连接
- 使用的插座。bytesAvailable为的内容的长度
这一工作,因为一个紧密的连接不放弃任何缓冲数据QTcpSocket.
不隶属于 StackOverflow