尝试在断开连接之前读取所有传输的数据:
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:
我必须使用信号/插槽机制吗?是否有可能避免信号/插槽机制?
答案 0 :(得分:3)
此类while
循环完全阻止Qt的event loop执行任何处理,这是不推荐的。您可以在while
循环中手动调用QCoreApplication::processEvents()
,这可能会使您的套接字状态进展,但这会产生您可能没有预料到的副作用(比如您的应用程序处理可能的其他事件)与其他类的事件处理程序和信号相关联。)
建议您创建一个插槽来处理从套接字读取的数据(连接到套接字的readyRead()
信号)和另一个插槽来处理套接字状态的变化(连接到套接字的stateChanged()
信号)。