導航:首頁 > 網路數據 > 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網路技術相關的資料

熱點內容
svn增加文件桌面圖標也變了 瀏覽:514
Abb機器人怎麼編程畫圓 瀏覽:958
手機微信接收的文件存儲在哪裡 瀏覽:546
js怎麼給div加邊框顏色 瀏覽:645
nodejshttphtml5 瀏覽:915
如何快速將文件內容快速調整 瀏覽:349
marsandroid開發視頻教程 瀏覽:814
word信任中心 瀏覽:480
pr有哪些預設文件 瀏覽:752
寶馬5系藍牙升級 瀏覽:950
ipad壓縮文件夾不見了 瀏覽:280
蘋果怎麼隱藏軟體視頻文件怎麼打開 瀏覽:541
按一列生成excel新文件 瀏覽:941
word列印機無法列印pdf文件夾 瀏覽:866
4s刷機成功白蘋果之後黑屏 瀏覽:503
自己在網路上如何開發市場 瀏覽:830
華為手機上的硬體管理工具下載 瀏覽:767
文件列印怎麼轉pdf 瀏覽:713
jsp用什麼編程工具 瀏覽:170
復制到u盤打開後顯示文件損壞 瀏覽:996

友情鏈接