日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Qt基于TCP网络程序发包封包抽象

發(fā)布時間:2023/12/2 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt基于TCP网络程序发包封包抽象 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

之前沒經(jīng)驗, 發(fā)送數(shù)據(jù)包的時候, 包頭包尾等信息都是通過重新定義一個結(jié)構(gòu)體實現(xiàn), 不同的協(xié)議包就有不同的結(jié)構(gòu)體, 結(jié)果導(dǎo)致這樣的現(xiàn)象: 有多少上層業(yè)務(wù)協(xié)議包, 我就分別重新定義一個對應(yīng)的加上包頭包尾的新的結(jié)構(gòu)體, 很費勁.......額....

現(xiàn)在, 重新想了下, 一個改進(jìn)的方式, 把"封包"過程抽象出來, 使用Qt的QByteArray來操作流數(shù)據(jù)(還是挺方便的)

.h

#ifndef PACKET_H #define PACKET_H#include <QObject> #include <QByteArray>#define FrontPacket "KT" #define EndPacket "END"//把數(shù)據(jù)封包, 加上包頭包尾包長標(biāo)志校驗 class Packet : public QObject {Q_OBJECT public:explicit Packet(QObject *parent = 0);static QByteArray Pack(QByteArray data); //封包 };#endif // PACKET_H

.cpp

#include "packet.h"Packet::Packet(QObject *parent) :QObject(parent) { }QByteArray Packet::Pack(QByteArray data) {QByteArray pack;pack.append(FrontPacket);quint32 len = 4 + data.size() + 4 + 3;pack.append(reinterpret_cast<const char*>(&len), 4);quint32 flag = 0;pack.append(reinterpret_cast<const char*>(&flag), 4);pack.append(data);quint32 crc = 0;pack.append(reinterpret_cast<const char*>(&crc), 4);pack.append(EndPacket);return pack; }

?

然后, 在上層界面操作時候, 可以用定義好的上層協(xié)議結(jié)構(gòu)體對象直接轉(zhuǎn)成字節(jié)流QByteArray類型然后發(fā)往底層網(wǎng)絡(luò)的發(fā)送數(shù)據(jù)接口, 在底層發(fā)送數(shù)據(jù)接口中, send數(shù)據(jù)前, 先把傳進(jìn)來的協(xié)議數(shù)據(jù)包傳到上邊封裝好的靜態(tài)類成員Pack()中處理一下, 就可以把返回值直接send了

?

好處: 上層業(yè)務(wù), 只要封裝好上層協(xié)議數(shù)據(jù), 就可以調(diào)用網(wǎng)絡(luò)底層一個統(tǒng)一的發(fā)送數(shù)據(jù)接口進(jìn)行發(fā)包(本挫人之前這樣做:底層網(wǎng)絡(luò)提供了針對不同協(xié)議包有不同的接口方法, 然后每添加一條新協(xié)議, 就要添加一個成員函數(shù), 每刪刪除一條協(xié)議, 就要.....111111111111111111)

?

完.....................................................

?

轉(zhuǎn)載于:https://www.cnblogs.com/jianc/archive/2013/01/29/2881651.html

總結(jié)

以上是生活随笔為你收集整理的Qt基于TCP网络程序发包封包抽象的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。