导航:首页 > 网络数据 > quint网络技术

quint网络技术

发布时间:2024-05-10 22:07:38

『壹』 解决QT的QWebsocket系统BUG,Mask为0导致网络连接断开的问题

项目使用qwebsocket。没想到发现一个大bug。
客户端建立5000连接同时发送心跳包给服务器,然后频繁会有连接断开。
服务器找到原因,QWebsocket的数据帧的mask值(大概是个十六进制的东西)错误,这个东西的最高位必须不能为0才可以,硬性规定,否则服务器会强制关闭这个连接。导致客户端收到“远程服务器连接断开”的error。
解决方法:
QT的QWebsocket有个接口,叫做setMaskGenerator,可以设置mask生成器,具体如下:
CMaskGenerator * m_mask = new CMaskGenerator();
QWebSocket* qwskt= new QWebSocket();
qwskt->setMaskGenerator(m_mask);

CMaskGenerator 类:
class CMaskGenerator : public QMaskGenerator
{
Q_DISABLE_COPY(CMaskGenerator)
public:
CMaskGenerator(QObject *parent = Q_NULLPTR) :QMaskGenerator(parent)
{

}
virtual quint32 nextMask()
{
quint32 val = quint32((double(qrand()) / RAND_MAX) * std::numeric_limits<quint32>::max());
while (val == 0)
{
seed();
val = quint32((double(qrand()) / RAND_MAX) * std::numeric_limits<quint32>::max());
}
return val;
}
virtual bool seed()
{
qsrand(QDateTime::currentDateTime().toTime_t());
return true;
}
private:
};

亲测此问题解决了,代码不必修改,直接可以用。

quint32((double(qrand()) / RAND_MAX) * std::numeric_limits<quint32>::max());

是Qt原本的随机规则,它不为0就没有问题,但我不知此值的具体要求(上限等等),所以只能沿用Qt的这个随机规则,用循环保证它不为0

阅读全文

与quint网络技术相关的资料

热点内容
pr有哪些预设文件 浏览:752
宝马5系蓝牙升级 浏览:950
ipad压缩文件夹不见了 浏览:280
苹果怎么隐藏软件视频文件怎么打开 浏览:541
按一列生成excel新文件 浏览:941
word打印机无法打印pdf文件夹 浏览:866
4s刷机成功白苹果之后黑屏 浏览:503
自己在网络上如何开发市场 浏览:830
华为手机上的硬件管理工具下载 浏览:767
文件打印怎么转pdf 浏览:713
jsp用什么编程工具 浏览:170
复制到u盘打开后显示文件损坏 浏览:996
编程中面向方向是哪个单词 浏览:659
怎么清除之前的网络认证账号 浏览:215
苹果应用老是闪退是怎么回事啊 浏览:946
涂装悬挂转台机器人怎么编程 浏览:67
电脑里的编程在什么地方 浏览:580
解锁苹果id忘记生日 浏览:847
微信支持文件传输 浏览:568
阻止文件夹搜索win10 浏览:145

友情链接