我使用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
始终返回固定值:0
或2896
。我的代码中有什么问题或网络造成的吗?
答案 0 :(得分:1)
bytesAvailable()
函数仅告诉您QTcpSocket
的内部缓冲区中有多少字节,它不会指示它查找来自网络的更多数据。因此,重复调用此函数是一项毫无意义的练习,可能导致程序挂起。
您要做的是等待更多数据到达。为此,您必须让程序返回事件循环或调用其中一个阻止函数,例如waitForReadyRead()
编辑:
如果您正在使用标准HTTP处理,请考虑使用QNetworkAccessManager
和QNetworkReply
来简化数据检索过程。