完整的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 
 

猜你喜欢

转载自blog.csdn.net/weixin_42089175/article/details/89343529