1

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

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:
我必须使用信号/插槽机制吗?是否可以避免信号/插槽机制?

4

1 回答 1

3

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

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

于 2013-06-04T02:32:26.247 回答