概述
- 上節說到消息粘包和數據不完整的問題未解決,也就是數據傳輸緩衝區固定,一旦數據長度超出緩衝區大小,便會出現問題。
- 解決方案就是,把每條消息封裝成一個包,包包含包頭和包體,包頭封裝要發送數據的長度,包體封裝數據。
- 創建兩個變量記錄當前讀到的位置和數據總長度,讀取部分到緩衝區,若讀到結尾結束,未到結尾繼續讀;接收類似
- 不包含文件傳輸功能
運行環境
IDEA
目錄結構
多模塊項目
lib-clink --工具包
box --數據傳輸包構建包
StringReceivePacket --接收包構建類
StringSendPacket ---發送包構建類
core --核心類包
Connector --客戶端連接類
IoArgs --Buffer封裝類
IoContext --上下文類,統籌
IoProvider --IO方法接口,即數據收發方法接口
Packet --數據傳輸包公共類
ReceiveDispather --接收調度類
ReceivePacket --接收包
Receiver --數據接收者
SendDispather --發送調度類
Sender --數據發送者
SendPacket --發送包
Impl --方法使用接口包
async --數據處理方法包
AsyncReceiveDispather --數據接收方法類
AsyncSendDispather --數據發送方法類
IoSelectorProvider --IoProvider的實現類
SocketChannelAdapter --數據收發具體實現類
utils --基本工具包
ByteUtils --byte數據的工具類
CloseUtils --關閉操作工具類
Clink --clink總類
sample-client --客戶端
bean --數據格式封裝包
ServerInfo --服務器信息封裝類
Client --客戶端啓動總類
TCPClient --TCP數據發送類
UDPSearcher --UDP搜索類
sample-foo --協議包
constants --協議規定包
TCPConstants --TCP協議規定端口等
UDPConstants --UDP協議規定端口等
sample-server --服務端
handle
ClientHandler --客戶端線程類
Server --服務器啓動總類
TCPServer --TCP服務端
UDPProvider --UDP接收廣播回送消息類
代碼
註釋也在裏邊了
鏈接: 百度網盤 提取碼: g4pz
包含文件傳輸功能的聊天室代碼
鏈接: 百度網盤 提取碼: qn42