完整的ChatRoom聊天室代码

完整的ChatRoom聊天室代码
原创Viki渡清欢 发布于2019-04-16 22:37:52 阅读数 537  收藏
展开
概述
上节说到消息粘包和数据不完整的问题未解决,也就是数据传输缓冲区固定,一旦数据长度超出缓冲区大小,便会出现问题。
解决方案就是,把每条消息封装成一个包,包包含包头和包体,包头封装要发送数据的长度,包体封装数据。
创建两个变量记录当前读到的位置和数据总长度,读取部分到缓冲区,若读到结尾结束,未到结尾继续读;接收类似
不包含文件传输功能
运行环境
 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 
————————————————
版权声明:本文为CSDN博主「Viki渡清欢」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42089175/article/details/89343529

原文地址:https://www.cnblogs.com/grj001/p/12222994.html