Что такое возвращаемое значение или QTcpSocket::errorString()
?
//...
if(!sock.waitForReadyRead(30))
{
qWarning() << "fails " << sock.errorString(); // fails here
emit error(sock.error());
return false;
}
//...
Обратите внимание, что во время выполнения вы всегда читаете данные в сокете, даже если QTcpSocket::waitForReadyRead
вернул false.
Вы уверены, что не получаете ту же ошибку в run
, как в receiveString
, но чтение завершается успешно, потому что вы игнорируете эту ошибку?
Будет ли run
все еще успешным, если вы используете этот код:
bool ok = true;
while(ok)
{
QString str;
//if(ok) ok = receiveString(sock, str);
if(sock.waitForReadyRead(30))
{
QByteArray buf = sock.readAll(); // same routine succeeds
str = buf;
qWarning() << str;
qWarning() << "Received: " << str;
if(ok)
{
ok = sendString(sock, "kaka");
}
}
else
{
qWarning() << "fails " << sock.errorString();
ok = false;
}
}