1、数据读取函数
qint64 bytesAvailable() const override;此函数返回socket底层buffer可读取的字节数,只调用此函数而不读取buffer中的数据,最终崩溃了,原因未弄明白,个人认为是缓冲区满了重新分配时出错,大神可指导一二。
//代码段
qDebug() << "tcpSocket->bytesAvailable()" << tcpSocket->bytesAvailable()
//运行结果
new connection
ConnectedState
tcpSocket->bytesAvailable() 22308
...
tcpSocket->bytesAvailable() 466952716
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
QByteArray readAll();从设备读取所有剩余数据,并将其返回为字节数组。此函数无法报告错误;返回空 QByteArray 可能意味着当前没有数据可供读取,或者发生了错误。
//代码
qDebug() << "tcpSocket->bytesAvailable()" << tcpSocket->bytesAvailable() << "tcpSocket->readAll().size" << tcpSocket->readAll().size();
//运行结果
本文探讨了在QT TCP Server中处理高带宽数据流时遇到的问题,特别是当客户端发送220Mbps数据时。建议避免使用bytesAvailable()不读取数据导致的可能错误,以及避免使用canReadLine()和readLine()可能导致的数据积压和丢包。推荐使用QByteArray readAll()一次性读取所有剩余数据,并将数据高效地写入共享缓冲区,以提高读取效率。
订阅专栏 解锁全文
4724

被折叠的 条评论
为什么被折叠?



