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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TCP解决粘包问题(结构数据封包拆包)

發布時間:2023/12/10 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TCP解决粘包问题(结构数据封包拆包) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

TCP封包拆包

  • 前言
  • 封包
    • 一、包結構
    • 二、封包方法
  • 拆包
  • 總結

前言

TCP協議(Transmission Control Protocol)是一種面向連接的、可靠的、基于字節流的通信協議,即TCP采用字節流的方式,以字節為單位傳輸字節序列。
如果簡單的發送長串的數據流,那么我們接收到的就是一串無規則的字節流,即不知道哪里開始讀,到哪里截止,那么就會出現丟包、粘包現象。如果要讓這無規則的字節流有規則,那么就需要我們去定義一個規則,那便是所謂的“封包規則”,相對應的就是“拆包規則”。

封包

一、包結構

簡單來說就是給每次發送的完整數據進行包裝處理,在包裝紙上打上標簽,來告訴別人里面都有啥,那么我們就可以通過包裝紙來進行分辨。
一般封包結構如下:

其中,包頭與包尾標識只是用來尋找數據,數據類型標識可以對應區別不同結構數據解碼規則,數據長度可以用來判斷數據是否完整。

typedef struct {unsigned long packHead;unsigned long dataType;unsigned long dataLen;char buf[dataLen];unsigned long packTail; }PACKSTRUCT;

二、封包方法

這里封包方法采用memcpy函數對數據進行打包,主要就是memcpy函數的調用,不了解的可以在封包時發現的關于QIODevice類write函數的坑一文中參考。

拆包

拆包流程圖:

總結

用該方法進行多文件傳輸明顯會比我之間所用的方法好,之前的方法見Qt多文件傳輸功能實現及方法概述。用該方法的代碼之后貼出。

總結

以上是生活随笔為你收集整理的TCP解决粘包问题(结构数据封包拆包)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。