bytesAvailable()返回值但waitForReadyRead()返回false为什么?

时间:2015-03-13 08:22:50

标签: qt sockets

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时超时。在其他情况下,它执行得很好。我已经检查了不同的数据大小,即使那时问题仍然是相同的。请指出我出错的地方。

1 个答案:

答案 0 :(得分:2)

我真的不知道你的期望。如果您认为自己可以获得更多数据,则只应调用waitForReadyReadfalse返回值只表示没有新数据到达,而不是没有任何内容可读。

你的病情应该是:

while(socket->bytesAvailable()<rem_bytes)

当您获得的字节数与预期接收的数量相同时,您不能等待,因为readyRead信号不会被激发。