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;
}
}