TCP粘包,半包解決方法
粘包,半包是TCP通信中經常遇到的問題,一般遊戲開發中,每條消息都包含消息頭,消息類型,以及要處理的數據信息,一般消息頭上包含着此條消息內容的長度,一旦socket中讀出的內容長度大於消息頭長度,我們稱之爲粘包,反之則稱之爲半包。遊戲開發中,一般每個socket中伴隨着自定義緩存區,用於存儲上一次未處理完的未完整信息。我之前開發的遊戲用的是java nio方式通信,java.nio.channels.SelectionKey中提供一個方法attach(Object object),新建一個緩存區ByteBuffer,調用attach將緩存區附加到此鍵,每次行鍵集掃描後,從SocketChannel中讀取數據,然後再檢查此鍵上一次緩存區是否有未完整的數據,將上一次未處理完成的數據和新讀取的數據拼起來,再進行數據處理,直到所有消息處理完畢,或到半包處,把未處理完成的消息再次放進緩存區,以此類推。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
com.fasterxml.jackson.databind.JsonMappingException: Invalid UTF-8 start byte 0xb1
原創
2024-05-30 22:15:03
雲效 Flow 配置備忘
原創
2024-05-30 11:43:23
Dolphinscheduler不重啓加載Oracle驅動
原創
2024-05-28 21:22:10
記錄一次cnvd事件型證書漏洞挖掘
原創
2024-05-28 11:16:19
構建強韌:愛奇藝VRS系統可用性建設實踐
原創
2024-05-28 02:22:00
spring源碼閱讀之bean加載過程(一)
原創
2024-05-27 23:55:57
今天!通義靈碼在北京、成都、杭州三城開講啦
原創
2024-05-27 21:13:46
關於在SpringBoot3.2中使用grpc插件生成*ServiceGrpc.java報錯找不到符號的一種解決方案
原創
2024-05-27 13:48:34
聊聊Spring中的數據綁定 --- WebDataBinder、ServletRequestDataBinder、WebBindingInitializer 文章源於Ai生成
微學網絡
2024-05-27 10:53:57
hadoop-2單節點和hive安裝
原創
2024-05-24 23:51:33
對話阿里云云原生產品負責人李國強:推進可觀測產品與OpenTelemetry開源生態全面融合
原創
2024-05-24 21:13:50
昔日輝煌不再,PHP老矣,尚能飯否?
原創
2024-05-23 23:48:42
Spring項目中使用NIO並行調用http接口指南
原創
2024-05-23 11:10:25