QTcpSocket->bytesAvailable 总是返回 0
Posted
技术标签:
【中文标题】QTcpSocket->bytesAvailable 总是返回 0【英文标题】:QTcpSocket->bytesAvailable always returns 0 【发布时间】:2013-06-04 08:41:28 【问题描述】:我想检测有多少字节可供读取:
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
【问题讨论】:
@thuga 我使用的是QRunnable
而不是QThread
,QRunnable
中是否有事件循环?
【参考方案1】:
已经有信号 readyRead () 通知您套接字何时有数据要读取。为什么要使用 while 循环?
您还可以将缓冲区的大小,然后将实际缓冲区写入套接字。然后在另一端读取时,首先读取#of bytes,然后读取缓冲区:
qint64 QIODevice::read ( char * data, qint64 maxSize ).
【讨论】:
以上是关于QTcpSocket->bytesAvailable 总是返回 0的主要内容,如果未能解决你的问题,请参考以下文章