1

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

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 状态总是连接,甚至拔掉网线

4

1 回答 1

0

已经有信号 readyRead () 在套接字有数据要读取时通知您。为什么要使用while循环?

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

qint64 QIODevice::read ( char * data, qint64 maxSize ). 
于 2013-06-04T19:02:40.470 回答