我想检测有多少字节可供阅读:
while( socket->ConnectedState == QTcpSocket::ConnectedState ) {
if(socket->bytesAvailable() > 0)
qDebug("%d", test->bytesAvailable());
}
我确定套接字已连接,但无论我从另一端写了多少字节,似乎byteAvailable
的返回值始终为0。
但是当我在断线后发现时:
if (! socket->waitForDisconnected(-1)) {
qDebug("Failed to receive disconnect message from client");
}
else {
qDebug("%d", socket->bytesAvailable());
qDebug(socket->readAll());
qDebug("Disconnected from client");
}
}
发送到调试窗口的信息是合理的:8 ABCDEFGH
。
可能导致这种情况发生的原因是什么?
PS:
这似乎也是一个死循环,因为它甚至在我从另一端断开后仍然保持运行。也许是因为这个原因:QTcpSocket state always connected, even unplugging ethernet wire
答案 0 :(得分:0)
已有信号readyRead(),当套接字有要读取的数据时,它会通知您。你为什么要使用while循环?
此外,您可以将缓冲区的大小和实际缓冲区写入套接字。然后在另一端读取时,首先读取#of字节,然后读取缓冲区:
qint64 QIODevice::read ( char * data, qint64 maxSize ).