QTcpSocket的bytesAvailable()返回一个固定值

时间:2014-08-23 14:14:49

标签: qt sockets

我使用QTcpSocket编写了一个服务器。服务器处理来自客户端应用程序的POST请求。我使用content-length字段来确定请求体的结束。代码如下:

    int length = 0;

    QString line = "";

    while(this->canReadLine())
    {
        line = this.readLine();

        if(line.contains("Content-Length"))
        {
            length = line.split(':')[1].toInt();
        }

        if(line == "\r\n")
        {
            break;
        }
    }

    for(; this.bytesAvailable() < length; ){}

    QString requestBody = this.readAll();

它在我的localhost中工作。但是当它在远程服务器上运行时,bytesAvailable始终返回固定值:02896。我的代码中有什么问题或网络造成的吗?

1 个答案:

答案 0 :(得分:1)

bytesAvailable()函数仅告诉您QTcpSocket的内部缓冲区中有多少字节,它不会指示它查找来自网络的更多数据。因此,重复调用此函数是一项毫无意义的练习,可能导致程序挂起。

您要做的是等待更多数据到达。为此,您必须让程序返回事件循环或调用其中一个阻止函数,例如waitForReadyRead()

编辑: 如果您正在使用标准HTTP处理,请考虑使用QNetworkAccessManagerQNetworkReply来简化数据检索过程。