前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Netty+Swing实现在线聊天室

Netty+Swing实现在线聊天室

作者头像
HcodeBlogger
发布2020-07-14 11:02:11
8260
发布2020-07-14 11:02:11
举报
文章被收录于专栏:Hcode网站Hcode网站

前言

在线聊天室2.0版本 在之前的博文的基础上,更换BIO的socket通信为NIO的Netty框架,添加新功能,整合管理端和用户端。

基本功能

  • 相较与前一版:
  • 添加启动时连接失败,进行有限次重连的操作。(客户端)
  • 还有监控连接是否异常中断,进行有限次断线重连操作。(客户端)
  • 服务端对客户端进行的心跳检测机制。(服务端与客户端)
  • 再则把管理端和服务端的的界面分离出来,使用策略模式,统一一个登录界面,根据是否成功输入管理员秘钥(默认为“HCODE”),负责生成不同的客户端界面(分为管理员和普通用户)。
  • 继承前一版:
  • 管理端 1)管理员设置聊天室IP,端口号,管理员昵称,连接服务器进入聊天室或退出聊天室。 2)系统消息日志记录,管理员可发布系统消息给各在线用户。 3)管理员在线与聊天室在线用户进行群聊。 4)管理员可对在线用户列表中指定用户进行私聊请求,对方同意即可开始私聊。 5)管理员可对在线用户列表中指定用户进行踢出聊天室操作,并通知其他人。
  • 普通用户端 1)用户设置聊天室IP,端口号,用户昵称,连接服务器进入聊天室或退出聊天室。 2)系统消息通知,接受服务器端发布的消息,以及用户一些操作。 3)用户可与其他在线用户进行群聊。 4)用户可与指定用户列表中其他在线用户进行私聊请求,同意即可开始私聊。 5)用户可以屏蔽指定用户列表中的用户的群聊发言,屏蔽后即接受不到对方发言, 同时也可以选择取消屏蔽。

传输的协议说明

代码语言:javascript
复制
COPYpublic class MsgModel implements Serializable {
    private byte type; // 权限信息标志
    private byte code; // 命令符
    private String body; // 消息主体
}

- type: 权限信息标志 (参数含义) 1. 管理员特权消息 2. 用户或管理员消息 3. 系统消息(客户端处理)

  • code: 命令符(参数含义)
    • 0.上线消息 1. 群聊 2. 私聊 3. 屏蔽某人 4. 取消屏蔽 5. 踢出某人
    • 6.系统通知 7. 管理员发布通知 8. 心跳检测 9. 发送在线用户列表给客户端
      1. 新用户加入 11. 用户退出 110. 权限认证
  • body:具体消息主体(code参数与之对应的格式)
代码语言:javascript
复制
COPY 1.群聊的body格式
 客户端发送: <id>${socketChannel.id}</id><msg>${msg}</msg>
 服务端发送: <id>${socketChannel.id}</id><name>${name}</name><msg>${msg}</msg><time>${time}</time>

 2.私聊的body格式为
 客户端发送:<id>${socketChannel.id}</id><order>{orderNum}</order><msg>${msg}</msg>

 当order为1,msg为start 
 当order为1,msg为exit

 服务端发送:<id>${socketChannel.id}</id><order>${orderNum}</order><msg>${msg}</msg><time>${time}</time>
 orderNum---> 1.发起私聊  2.结束私聊 3.普通私聊信息 4.对方已离线,关闭私聊窗口

 3 4.屏蔽或取消屏蔽的body格式为
 客户端发送:<me>${myId}</me><other>${shieldId}</other>

 5.管理员踢人指令body格式:
  客户端发送:发生所选用户的id
  服务端发送:<admin>${socketChannel.id}</admin><kick>${beKick.id}</kick><time>${time}</time>

 6.系统通知消息的body格式为:
  <msg>${msg}</msg><time>${time}</time>

 7.管理员发布系统消息body格式:
  <id>${socketChannel.id}</id><msg>${msg}</msg><time>${time}</time>

 8.心跳事件body格式:
  客户端发送:"a ‘ping’ beat heart from"+ctx.channel().remoteAddress() //后面为该用户端所在的ip和端口号
  服务端:只进行心跳检测,客户端在心跳检测事件内有发送信息让服务端读到,则说明该用户还存活,否则关闭通道。

 9.用户列表 由服务器端查询在线用户发送给新加入的用户 
  body格式为:
  <user><id>${socketChannel.id}</id><name>${name}</name><authority>${admin or user}</authority></user>
  注:每个用户的信息都如上,然后列表有多个用户信息拼接而成。

 10 11.用户进入与退出的消息body格式:
 <id>${socketChannel.id}</id><name>${name}</name><authority>${authority}</authority><time>${time}</time>

 110.权限认证消息的body格式:
 客户端发送:管理员认证密钥HCODE即可行驶管理员权力。

界面演示

  • 可选以普通用户或者管理员身份登录,管理员权限密令默认为:HCODE
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
  • 普通用户
在这里插入图片描述
在这里插入图片描述
  • 管理员
在这里插入图片描述
在这里插入图片描述
  • 私聊窗口
在这里插入图片描述
在这里插入图片描述
  • 启动时连接失败,进行有限次重连
在这里插入图片描述
在这里插入图片描述
  • 断线重连
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

项目GitHub地址

https://github.com/HimitZH/Netty-ChatRoom

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020年7月11日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 基本功能
  • 传输的协议说明
  • 界面演示
  • 项目GitHub地址
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档