Qt -崩溃时,我使用tcp套接字写数据,如果tcp服务器首先关闭,然后重新打开连接



我正在将我的应用程序从Qt 4.7移动到Qt 6.3。在Qt 4.7中,所有的工作都很好。在Qt 6.3中,当tcp服务器关闭连接时,我有一些问题,我再次建立连接,并尝试写数据。

这是我用来写入套接字的函数:

void NetworkFacility::Write(QTcpSocket& oTCPSocket, const QVariant& oV)
{
//Controls Socket is valid
if (oTCPSocket.state() == QAbstractSocket::ConnectedState)
{
QByteArray block;                           //ByteArray to serialiaze object
MyPacket oPacket;                           //Packet to send
//Set Size of QVariant object
oPacket.setPacketSize(getQVariantSize(oV));
//Set QVariant
oPacket.setTransport(oV);
//Create stream to write on ByteArray
QDataStream out(&block, QIODevice::WriteOnly);
//Sets version
out.setVersion(QDataStream::Qt_4_7);
//Serializes
out << oPacket;
//TX to socket
oTCPSocket.write(block);
}
}

我这样处理断开连接:

void MyClient::remoteNodeDisconnected()
{
m_pTCPSocket->flush();
m_pTCPSocket->close();
}
void MyClient::ManagesTCPError(QAbstractSocket::SocketError socketError)
{
//Clears last packets
m_pTCPSocket->flush();
}

这是断开连接后的连接部分代码:

m_pTCPSocket->connectToHost(m_sIpAddress, m_iIpPort);
//Waits connection
if (m_pTCPSocket->waitForConnected(MSEC_WAIT_FOR_CONNECTION))
{
//Print connected and exit from while loop
break;
}

最后是我管理远程服务器连接的方式:

void MyClient::remoteNodeConnected()
{
//Improve Network latency on this connection
m_pTCPSocket->setSocketOption(QAbstractSocket::LowDelayOption, 1);
}

问题是,在第一次连接上所有工作正常。如果服务器断开连接(即我拔掉局域网中的服务器电缆或我关闭并重新启动服务器应用程序),然后再次连接调用:

oTCPSocket.write(block);

在Networkfacility::Write方法中产生崩溃

为什么写方法在重新连接后产生崩溃?

我通过完全删除oTCPSocket实例修复了这个问题。

void MyClient::remoteNodeDisconnected()
{
m_pTCPSocket->flush();
m_pTCPSocket->close();
m_pTCPSocket.deleteLater();
m_pTCPSocket = 0;
}

最新更新