【发布时间】:2022-12-07 15:34:59
【问题描述】:
我正在将我的应用程序从 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);
}
问题是在第一次连接时一切正常。如果服务器断开连接(即我在 LAN 中拔下服务器电缆或我关闭并重新启动服务器应用程序)然后再次连接调用:
oTCPSocket.write(block);
在 Networkfacility::Write 方法中生成崩溃。
为什么write方法重连后会crash?
【问题讨论】:
标签: qt sockets qtcpsocket qtcpserver