Socket粘包分包

2021-10-04 11:50:51 字數 944 閱讀 2786

粘包和分包問題

1.首先什麼是包

包就是每次伺服器向客戶端傳送的資料每傳送乙個訊息都會被打成乙個包傳送到客戶端。

客戶端向伺服器端傳送訊息也是一樣的。

2.為什麼會有粘包和分包的問題

是因為sockettcp自身的優化機制所導致的。

3.什麼是粘包

粘包就是當伺服器端傳送的資料很小的時候又很頻繁的時候,就會消耗效能,所以sockettcp就會把幾個資料報打成乙個包傳送到客戶端,來進行優化網路。

4.什麼是分包

分包就是當伺服器端傳送的訊息特別大的時候,它的傳輸速度就會特別慢,還有可能是傳送中途會失敗,這個時候這條訊息就要在次重新傳送一次,非常消耗效能和時間,為了避免這樣的事情發生,sockettcp自身優化機制就會把這條特別大的訊息分開為n個小包傳送到客戶端,提高訊息的傳輸速度與安全性,就算中間有個別的包丟失了,也不用重新全部傳送一遍而是單獨傳送一遍丟失的小包就好了。

5.粘包或者分包後接到的順序是什麼樣的

雖然經過分包或者粘包,但是他的先後順序是不會變的。

比如第一條訊息是1第二條是2那麼他接收到的粘包資料就是12。

分包也是一樣,分包粘包不會影響資料的順序,只是會影響接收的次數。

6.什麼時候會出現這種問題

例如:在unity中某個遊戲物體的座標需要實時的同步,這個時候就會出現粘包問題因為它的資料非常小只有xyz的座標資料,但是每秒要同步很多次,造成了資料傳輸頻繁資料又非常小就會出現粘包的現象。

7.粘包分包的解決方案

我們每次傳送的訊息都是乙個byte陣列,這個資料肯定是有乙個大小的,這時候我們在這個資料前面加乙個資料,這個資料來代表我們的資料長度,也就是我們說的訊息頭,然後我們在讀取長度的時候就會先讀取到這個資料的長度,然後我們知道了資料的長度就往後讀取相應長度的位元組就好了,如果發現我們後面的資料沒有那麼長這個時候就不處理等到滿足相應的長度在去處理。我們的資料長度是不固定的,但是我們的訊息頭是固定的。

粘包和分包

socket通訊時會對傳送的位元組資料進行分包和粘包處理,屬於一種socket內部的優化機制。粘包 當傳送的位元組資料報比較小且頻繁傳送時,socket內部會將位元組資料進行粘包處理,既將頻繁傳送的小位元組資料打包成 乙個整包進行傳送,降低記憶體的消耗。分包 當傳送的位元組資料報比較大時,socke...

socket的半包,粘包與分包的問題

首先看兩個概念 短連線 連線 傳輸資料 關閉連線 http是無狀態的,瀏覽器和伺服器每進行一次http操作,就建立一次連線,但任務結束就中斷連線。也可以這樣說 短連線是指socket連線後傳送後接收完資料後馬上斷開連線。長連線 連線 傳輸資料 保持連線 傳輸資料 關閉連線。長連線指建立socket連...

Socket的半包,粘包與分包的問題

概述 關於半包 粘包和分包的現象產生,是因為tcp當中只有流的概念,沒有包的概念.而面向流的通訊是無訊息保護邊界的。由於tcp無訊息保護邊界,需要在訊息接收端處理訊息邊界問題,因此自然產生了如何分包。半包 指接受方沒有接受到乙個完整的包,只接受了部分,這種情況主要是由於tcp為提高傳輸效率,將乙個包...