QTcpSocket-> bytesAvailable总是返回0

时间:2013-06-04 08:41:28

标签: c++ qt

我想检测有多少字节可供阅读:

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

1 个答案:

答案 0 :(得分:0)

已有信号readyRead(),当套接字有要读取的数据时,它会通知您。你为什么要使用while循环?

此外,您可以将缓冲区的大小和实际缓冲区写入套接字。然后在另一端读取时,首先读取#of字节,然后读取缓冲区:

qint64 QIODevice::read ( char * data, qint64 maxSize ).