網路遊戲中使用TCP處理粘包的兩種思路

2021-10-24 10:43:10 字數 617 閱讀 9452

將傳送資料封裝成包,就像tcp協議一樣加乙個包頭。

使用分隔符,對傳送資料時在資料尾部加入分割符。

第一種方式處理粘包,可以在要傳送資料的首部加2位元組大小的包頭儲存資料報的長度,在資料結束位置加乙個位元組的包尾用來校驗資料。校驗值等於迴圈資料的每個位元組按位異或的最終值。

一般網路遊戲伺服器中比如手遊會採用第一種方式處理粘包問題,在設計協議時都會考慮粘包問題,每一條協議都包含協議頭和協議體。而設計協議頭時就需要考慮粘包問題,而協議體便是我們要傳送的資料。

協議頭:

struct protocol_head_t

__attribute__((packed));//取消結構在編譯過程中的優化對齊,按照實際占用位元組數進行對齊,gcc特有的語法。

當然也可以採用訊息固定長度的方式來處理,不過不夠靈活。還有就是利用訊息本身的格式來分包,比如xml格式訊息中....配對,json格式中配對。

網路遊戲粘包處理

int tcpclient onrecv else return error void tcpclient decoderecvbuffer decodeoffset net packet head len 從池子裡面取出長度為datalen的m recievepacket 實際上就是乙個char ...

網路遊戲資料傳輸 粘包的處理

網路傳輸大體上包含這四個協議type area command message,這四層協議是依次向下傳遞的。所謂協議,說簡單點就是伺服器端和客戶端的乙個約定,比如,向伺服器傳送 1,0,1,賬號 密碼 約定type中1代表登入模組,因為登陸不需要經過area協議,所以跳過area協議,直接到comm...

網路遊戲中的網路程式設計

談談網路遊戲中的 網路 程式設計 近段時間總是有不少人問我關於完成埠模型的一些資料,很多時候其實我很鬱悶,為什麼大家會選擇使用完成埠呢?或者說很多時候他們竟為了使用完成埠,而使用windows作為網路遊戲伺服器平台,還一開口羅列出一堆使用windows平台的網路遊戲案例。有些兄弟跟我一直爭論 win...