Qt tcp打包傳送資料

2021-09-29 04:26:05 字數 1197 閱讀 7597

qstring msg =

"本句話就是要傳送的資訊內容"

;qbytearray block;

// 定義乙個位元組陣列

qdatastream out

(&block,qiodevice::writeonly)

;// block為儲存快取區,只寫模式

out.

setversion

(qdatastream::qt_4_6)

;// 保持qt版本的相容性,使用硬編碼指定流的版本號,客戶端和伺服器端使用的版本要相同

// quint16的意思:16位的無符號整型,庫函式中的定義如下:typedef unsigned short quint16;

out<<

(quint16)

0

// 前面的「quint16(0)」 只是用來佔空間的,佔兩個位元組,值先設為0,待會用於放置檔案的大小資訊。

// 後面的msg才是真正要傳送的資料。

out.

device()

->

seek(0

);// 返回到block的開始,即定位到一開始值為0的那個記憶體位置,為下面的寫入資料大小資訊做好準備

out<<

(quint16)

(block.

size()

-sizeof

(quint16));

// 計算出真正要傳送的資料大小,並寫入

tcpsocket-

>

write

(block)

;// 傳送tcp資料

qdatastream說是提供二進位制資料到qiodevice的序列化,

qiodevice是輸入輸出的基類

序列化是:將物件儲存到介質中或是以二進位制方式通過網路傳輸

tcp資料是一串長長的流,你事先不知道它的長度

因此你需要現用乙個東西來占用tcp流最開始的那段空間

當加入真正要傳送的資料的時候,流的大小才能確定下來,這個時候就吧計算好的結果放到之前佔的那個空間去

我們都在資料流的最開始寫入完整檔案的大小資訊(規定),這樣接收端就可以根據大小資訊來判斷是否接受到了完整的檔案。

tcp業務層資料報分片(主要引用)

qdatastream中out和in物件的意思和用法 ?

qdatastream 的使用

QT,tcp轉十六進製制傳送資料

qt接收十六進製制比較簡單,收到二進位制資料後直接tohex 即可成功顯示 qbytearray hexdata buffer.tohex qdebug 這裡有乙個小問題,就是網上現在的這個 使用的是toascii 函式,但是這個函式在qt5.4中沒了,換成tolain1 就行了。qbytearra...

QT TCP 讀資料的幾種方式

1 qtcpsocket 繼承於qabstractsocket繼承於qiodevice 2 qtcpsocket 提供的幾種接收和傳送資料方法 3 例子1 write const qbytearray qint64 cpp 用於暫存要傳送的資料 qbytearray block 使用資料流寫入資料 ...

巧妙使用static 為資料打包並傳送

只要做過專案的朋友對關鍵字static應該都有一些了解,但未見了解很全面的。在c語言中,關鍵字static有以下明顯的作用 1.static變數分配到靜態記憶體中,這一點和全域性非靜態變數相同。2.在函式體,static變數只要不進行修改操作,在被呼叫過程中其值將保持不變。3.在模組內,全域性sta...