标题:QT tcp 崩溃
作者:介农酥
日期:2023-04-16 22:04
内容:
Qt:服务器端
TCP/IP助手:客户端
1)服务器端开始监听QTcpServer::Listen()
2)客户端连接服务器端
3)关闭服务器端QTcpServer::close()
4)服务器端又重新监听QTcpServer::Listen()
4)关闭客户端(实际上已经断了,至少助手没有显示关闭,所以必须先点击,再点击),又连接服务端
5)服务端崩溃,崩溃的地方在
qint64 QIODevice::write(const QByteArray &data)
{
Q_D(QIODevice);//这句崩了
// Keep the chunk pointer for further processing in
// QIODevicePrivate::write(). To reduce fragmentation,
// the chunk size must be sufficiently large.
if (data.size() >= QRINGBUFFER_CHUNKSIZE)
d->currentWriteChunk = &data;
const qint64 ret = write(data.constData(), data.size());
d->currentWriteChunk = nullptr;
return ret;
}
#1 [liudianwu 04-17 17:38]
QTcpServer::close()仅仅是关闭监听,但是你的之前的连接都在的,你需要先关闭连接再close监听。否则没用的。
#2 回 liudianwu 的帖子 [介农酥 04-18 09:54]
liudianwu:QTcpServer::close()仅仅是关闭监听,但是你的之前的连接都在的,你需要先关闭连接再close监听。否则没用的。 (2023-04-17 17:38)
非常感谢,我关闭服务器,顺便关了连接的socket,tcp/ip助手这边确实显示关闭了(之前显示连接的状态),但是服务器再次开起来,tcp/ip助手连接,还是崩了,错误的地方还是一样的。
#3 [spygg 04-18 16:29]
tcpserver 在退出的时候最好显式销毁, 也就是不要用 deletelater 或者利用父对象自动回收特性删除, 直接delete 试试
#4 回 spygg 的帖子 [介农酥 04-18 19:01]
spygg:tcpserver 在退出的时候最好显式销毁, 也就是不要用 deletelater 或者利用父对象自动回收特性删除, 直接delete 试试 (2023-04-18 16:29)
我没有delete,tcpserver也没有定义成指针,只是单纯的关闭。