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...