我有一个服务器应用程序,它发送一些xor加密字符串。我正在阅读我的QT客户端应用程序。有时,服务器速度较慢,我无法接收整个字符串。我已经尝试过类似下面的内容,但它卡住了(请参阅下面的注释)。我如何等待,直到我掌握了整个数据。我试图bytesAviable()
但后来我又遇到问题(无限循环)无法正确读取套接字
QTcpSocket * sock = static_cast<QTcpSocket*>(this->sender());
if (key == 0)
{
QString recv(sock->readLine());
key = recv.toInt();
qDebug() << "Cheia este " << key;
char * response = enc_dec("#AUTH|admin|admin",strlen("#AUTH|admin|admin"),key);
sock->write(response);
}
else
{
busy = true;
while (sock->bytesAvailable() > 0)
{
unsigned short word;
sock->read((char*)(&word),2);
qDebug()<<word;
//Sleep(100); if i do this than it works great!
QByteArray bts = sock->read(word);
while (bts.length() < word)
{
char bit; //here get's stuck
if (sock->read(&bit,1) > 0)
bts.append(bit);
sock->flush();
}
char * decodat = enc_dec((char*)bts.data(),bts.length() - 2,key);
qDebug() << decodat;
}
}
您可能想要使用waitForReadyRead()。如果传入的字节准备好被读取,则返回true。 –
@LwinHtooKo我不能指定我想要的manny字节如何 – opc0de
但是当你做readAll()时,它会给你所有的字节(QByteArray)。 QByteArray.size()是它实际读取多少字节。 –