Qt - QTcpSocekt无法检测连接丢失

时间:2013-06-04 01:52:39

标签: c++ qt

尝试在断开连接之前读取所有传输的数据:

while( socket->state() == QTcpSocket::ConnectedState )
    if ( socket->bytesAvailable() > 0 )
        qDebug("Read from client: %s", QString(socket->readAll()).toStdString().c_str());

但是当我从另一端断开连接时,似乎socket->stated()仍然保持QTcpSocket::ConnectedState,我怎样才能检测到套接字与另一端断开连接?

PS:
  我必须使用信号/插槽机制吗?是否有可能避免信号/插槽机制?

1 个答案:

答案 0 :(得分:3)

此类while循环完全阻止Qt的event loop执行任何处理,这是不推荐的。您可以在while循环中手动调用QCoreApplication::processEvents(),这可能会使您的套接字状态进展,但这会产生您可能没有预料到的副作用(比如您的应用程序处理可能的其他事件)与其他类的事件处理程序和信号相关联。)

建议您创建一个插槽来处理从套接字读取的数据(连接到套接字的readyRead()信号)和另一个插槽来处理套接字状态的变化(连接到套接字的stateChanged()信号)。