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 而不是QThreadQRunnable 中是否有事件循环? 【参考方案1】:

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

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

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

【讨论】:

以上是关于QTcpSocket->bytesAvailable 总是返回 0的主要内容,如果未能解决你的问题,请参考以下文章

没有信号/插槽的 QtcpSocket

QTcpSocket类中的ReadyRead()信号没有被触发

QT攻略——我在QT中遇到的那些坑

QTcpSocket - 如何发送两个数字

如何使用qtcpsocket一次写一个字符串?

QTcpSocket write 发不出去