TCP粘包,半包解決方法
粘包,半包是TCP通信中經常遇到的問題,一般遊戲開發中,每條消息都包含消息頭,消息類型,以及要處理的數據信息,一般消息頭上包含着此條消息內容的長度,一旦socket中讀出的內容長度大於消息頭長度,我們稱之爲粘包,反之則稱之爲半包。遊戲開發中,一般每個socket中伴隨着自定義緩存區,用於存儲上一次未處理完的未完整信息。我之前開發的遊戲用的是java nio方式通信,java.nio.channels.SelectionKey中提供一個方法attach(Object object),新建一個緩存區ByteBuffer,調用attach將緩存區附加到此鍵,每次行鍵集掃描後,從SocketChannel中讀取數據,然後再檢查此鍵上一次緩存區是否有未完整的數據,將上一次未處理完成的數據和新讀取的數據拼起來,再進行數據處理,直到所有消息處理完畢,或到半包處,把未處理完成的消息再次放進緩存區,以此類推。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
前端面試題 - vue的雙向綁定原理是什麼?
原創
2024-05-17 00:41:12
【解決】element表單動態添加或更新表單項,回顯後無法修改或提示爲空的問題
原創
2024-05-15 12:08:40
「Java開發指南」如何用MyEclipse搭建GWT 2.1和Spring?(二)
原創
2024-05-17 12:21:26
Java ThreadPoolShutdown
原創
2024-05-17 02:06:32
通過MVEL表達式和Apache Chain職責鏈模式解耦MQ消息處理節點的實踐應用
原創
2024-05-16 23:56:24
Spring @EnableXxx註解的使用理解
原創
2024-05-16 23:48:06
java將list結果分成3份執行 原創
文文1
2024-05-16 02:09:55
OSS_PIPE:Rust編寫的大規模文件遷移工具
京東雲開發者
2024-05-15 23:59:27
高效調度新篇章:詳解DolphinScheduler 3.2.0生產級集羣搭建
原創
2024-05-15 21:22:54
Spring cloud gateway入門
原創
2024-05-15 11:50:15
JDBC連接openGauss6.0和PostgreSQL16.2性能對比
原創
2024-05-14 11:00:08
爲什麼阿里不建議用excutors創建線程池
原創
2024-05-14 02:07:06
Java遊戲服務器3
osc_hwc3munb
2024-05-14 02:04:28
Android內存管理機制官方詳解文檔
osc_51airx3z
2024-05-14 00:37:42