socket->bytesAvailable()
返回可用字节数,但waitForReadyRead()
返回false
。仅当bytesAvailable()
的值与我的预期值匹配时才会发生这种情况。
int rem_bytes=length+2;//if rem_bytes=4000
while(socket->bytesAvailable()<=rem_bytes)
{
if (!socket->waitForReadyRead(10000))//if socket->bytesAvailable()==rem_bytes it times out
{
qDebug() << "waitForReadyRead() timed out";
return;
}
byteArray.append(socket->read(rem_bytes));
if(byteArray.size()==length+2)
{
for(int j=0;j<length;j++)
newarray.append(byteArray[j]);
fileobj.write(newarray);
fileobj.flush();
newarray.clear();
byteArray.clear();
break;
}
else
{
rem_bytes -=byteArray.size();
}
}
Send();
}
waitForReadyRead()
仅在while循环中bytesAvailable()==rem_bytes
时超时。在其他情况下,它执行得很好。我已经检查了不同的数据大小,即使那时问题仍然是相同的。请指出我出错的地方。
答案 0 :(得分:2)
我真的不知道你的期望。如果您认为自己可以获得更多数据,则只应调用waitForReadyRead
。 false
返回值只表示没有新数据到达,而不是没有任何内容可读。
你的病情应该是:
while(socket->bytesAvailable()<rem_bytes)
当您获得的字节数与预期接收的数量相同时,您不能等待,因为readyRead
信号不会被激发。