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