完整的ChatRoom聊天室代碼

概述

  • 上節說到消息粘包和數據不完整的問題未解決,也就是數據傳輸緩衝區固定,一旦數據長度超出緩衝區大小,便會出現問題。
  • 解決方案就是,把每條消息封裝成一個包,包包含包頭和包體,包頭封裝要發送數據的長度,包體封裝數據。
  • 創建兩個變量記錄當前讀到的位置和數據總長度,讀取部分到緩衝區,若讀到結尾結束,未到結尾繼續讀;接收類似
  • 不包含文件傳輸功能

運行環境

 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 
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章