TCP解决粘包问题(结构数据封包拆包)
生活随笔
收集整理的這篇文章主要介紹了
TCP解决粘包问题(结构数据封包拆包)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
TCP封包拆包
- 前言
- 封包
- 一、包結構
- 二、封包方法
- 拆包
- 總結
前言
TCP協議(Transmission Control Protocol)是一種面向連接的、可靠的、基于字節流的通信協議,即TCP采用字節流的方式,以字節為單位傳輸字節序列。
如果簡單的發送長串的數據流,那么我們接收到的就是一串無規則的字節流,即不知道哪里開始讀,到哪里截止,那么就會出現丟包、粘包現象。如果要讓這無規則的字節流有規則,那么就需要我們去定義一個規則,那便是所謂的“封包規則”,相對應的就是“拆包規則”。
封包
一、包結構
簡單來說就是給每次發送的完整數據進行包裝處理,在包裝紙上打上標簽,來告訴別人里面都有啥,那么我們就可以通過包裝紙來進行分辨。
一般封包結構如下:
其中,包頭與包尾標識只是用來尋找數據,數據類型標識可以對應區別不同結構數據解碼規則,數據長度可以用來判斷數據是否完整。
二、封包方法
這里封包方法采用memcpy函數對數據進行打包,主要就是memcpy函數的調用,不了解的可以在封包時發現的關于QIODevice類write函數的坑一文中參考。
拆包
拆包流程圖:
總結
用該方法進行多文件傳輸明顯會比我之間所用的方法好,之前的方法見Qt多文件傳輸功能實現及方法概述。用該方法的代碼之后貼出。
總結
以上是生活随笔為你收集整理的TCP解决粘包问题(结构数据封包拆包)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Web开发者不可不知的16条原则
- 下一篇: 2018.11.14成立我的博客