我有以下代码读取QTCPSocket:

QString request;

while(pSocket->waitForReadyRead())
{
    request.append(pSocket->readAll());
}

这个问题码是,它读取所有的输入,然后暂停结束时30秒。(这是默认的超时。)

什么是适当的方法来避免超时长和检测,结束输入已经达到?(答复,避免信号是首选,因为这是应该发生的事情同步,在一线。)

有帮助吗?

解决方案

可以肯定的唯一方法是当你接收的字节你期待的确切数目。这通常是通过在数据包的开始发送数据的大小来完成。阅读,然后再不断循环,直到你得到这一切。另一种方法是使用一个前哨,特定系列标记数据的末尾的字节但这通常会混乱。

其他提示

如果你处理这样的情况HTTP响应,其中不包含内容的长度,你知道另一端将关闭连接一旦发送数据,有一个替代解决方案。

  1. 使用的插座。setReadBufferSize,以确保有足够的阅读缓冲区的所有数据,可以发送。
  2. 叫座。waitForDisconnected等待的远程端关闭连接
  3. 使用的插座。bytesAvailable为的内容的长度

这一工作,因为一个紧密的连接不放弃任何缓冲数据QTcpSocket.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top