gpt4 book ai didi

c++ - 无法从套接字中正确读取

转载 作者:行者123 更新时间:2023-11-28 07:56:28 27 4
gpt4 key购买 nike

我有一个发送一些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;
}

}

最佳答案

我不知道 key == 0 的含义是什么,但您几乎肯定在滥用 available(),就像几乎所有曾经调用过的人一样它,包括我。它告诉您可以在不阻塞的情况下读取多少数据。它与最终可能通过连接传递多少数据无关,原因是有些 TCP API 可以告诉您前者,但不能告诉您后者。事实上,后者没有任何实际意义,考虑到同行可以从现在一直写到世界末日。您应该只是阻塞和循环,直到您读取了下一项工作所需的数据量。

关于c++ - 无法从套接字中正确读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12598937/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com