Qt - QTcpSocekt无法检测连接丢失

Qt - QTcpSocekt cannot detect connection lost

本文关键字:连接 检测 QTcpSocekt Qt      更新时间:2023-10-16

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

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:


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

这种类型的while循环完全阻止Qt的事件循环执行任何处理,这是不推荐的。您可以在while循环中手动调用QCoreApplication::processEvents(),这可能会允许套接字的状态进展,但这会产生您可能意想不到的副作用(例如您的应用程序处理可能与其他类上的事件处理程序和信号相关的其他事件)。

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