这是我编写的同步TCP客户端中read()语句之上的一小段代码。
std::cout << "available? " << socket->bytesAvailable() << std::endl;
socket->waitForReadyRead();
std::cout << "reading..." << std::endl;
bytesRead = socket->read(message + totalBytesRead, messageSize - totalBytesRead);
以下一行:
插座&GT;信息bytesAvailable()
返回4,因此显然可以读取数据。我遇到的问题是waitForReadyRead()阻塞,直到默认超时为30秒。 Read()然后继续读取下一行的0字节。
因此,如果有可读字节,为什么waitForReadyRead()阻止
答案 0 :(得分:0)
来自QIODevice :: waitForReadyRead文档:
阻止新数据可用进行阅读和readyRead() 信号已经发出,或者直到msecs毫秒已经过去。如果 msecs为-1,此函数不会超时。
如果新数据可用用于阅读,则返回true;否则返回 false(如果操作超时或发生错误)。
处理网络连接的最佳原因是使用信号/插槽机制(异步为什么)