Netty+Android搭建一个简易聊天室(实现群聊和私聊)

这篇博客介绍了如何利用Netty框架和Android技术搭建一个包含群聊和私聊功能的简易聊天室。博主首先概述了自己的学习历程,然后详细讲解了服务端的准备工作,包括开发环境、所需jar包。接着,逐步阐述了服务端的搭建,涉及实体类、编解码器、启动服务器、初始化管道等关键步骤。最后,博主提到了客户端的创建,包括ChatClient类、ChatClientInitializer类、ChatClientHandler类等。整个过程结合了具体的代码示例,适合初学者入门。
摘要由CSDN通过智能技术生成

零,前言

JRBM项目中无论是好友私聊,公开聊天室,还是比赛平台都需要用到长连接,之前没有接触过网络通信等知识,更别说框架了,因此直接上手netty确实有些困难,在前期主要是在b站上看(https://www.bilibili.com/video/av26415011)这个视频,但是一些名词根本没有接触过,看着代码也只能照着敲,根本不知道网络通信是什么原理,什么是http协议,什么是socket,什么是编解码等,于是跟着敲了几节课的代码之后准备从实际项目入手,于是看了( https://www.bilibili.com/video/av16767113)这个聊天室的搭建,至少明白了聊天室的基本结构,然后再入手了《Netty权威指南2》,基本了解了Netty的各个组件的基本用法和基本含义,于是花了两天时间从头搭建了一个能够群聊和私聊的聊天室,仅仅代表本人的粗浅理解,也希望能帮助小白入门,大佬绕行!

一,准备工作

开发环境:android+javaweb,前端(客户端)使用android studio,后端(服务端)使用idea

所需jar包:

主要是三个:

netty的jar包,直接去官网( https://netty.io/)下载最新即可,然后只要压缩包中的netty-all-4.1.29.Final即可

messagepack的jar包,去这个链接( http://repo1.maven.org/maven2/org/msgpack/msgpack/0.6.12/)直接下载msgpack-0.6.12.jar

javassist的jar包,去这个链接( https://github.com/jboss-javassist/javassist/releases)下载最新版的jar包

这三个jar包的作用是,netty负责通信的整体框架,messagepack负责消息的编码和解码,javassist在编解码中需要用到

二,服务端的搭建

创建一个web项目(也可以是javase项目),虽然我写的时候用到了spring,但是这篇文章中就不用spring来管理类了

首先看一下项目的结构,

一共三个包,Coder包放编码和解码器的类,entity包放两个实体类,一个是消息的实体类,所有消息都会被包装成这个ChatMessage类,便于读取,UserChannels用于放当前在线的用户的用户名和其channel地址,这样私聊的时候就可以通过用户名调用目标用户的channel进行消息传送,server包中的类前三个是netty创建连接通道需要用到的比较固定的类,StartServer用于启动服务器。

接下来是服务端搭建的步骤:

1.创建实体类ChatMessage

我们希望传输的数据不仅是简简单单的一个字符串,而是一个有很多信息的实体,因此我们创建一个实体模板,所有的消息都被解码包装成这个类,然后直接对这个类的对象进行读写操作即可

import org.msgpack.annotation.Index;
import org.msgpack.annotation.Message;

//消息实体,协议
@Message
public class ChatMessage {
    @Index(0)
    private String sendUser;
    @Index(1)
    private String receiveUser;
    @Index(2)
    private String message;
    @Index(3)
    private int messagetype;//1:初始化认证消息,2:聊天消息

    public ChatMessage() {
    }

    public ChatMessage(String sendUser, String receiveUser, String message, int messagetype){
        this.sendUser=sendUser;
        this.receiveUser=receiveUser;
        this.message=message;
        this.messagetype=messagetype;
    }

    public String getSendUser() {
        return sendUser;
    }

    public void setSendUser(String sendUser) {
        this.sendUser = sendUser;
    }

    public String getReceiveUser() {
        return receiveUser;
    }

    public void setReceiveUser(String receiveUser) {
        this.receiveUser = receiveUser;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public int getMessagetype() {
        return messagetype;
    }

    public void setMessagetype(int messagetype) {
        this.messagetype = messagetype;
    }

    @Override
    public String toString() {
        return "ChatMessage{" +
                "sendUser='" + sendUser + '\'' +
                ", receiveUser='" + receiveUser + '\'' +
                ", message='" + message + '\'' +
                '}';
    }
}

这个类包含了发送消息的用户、接受消息的用户、消息的内容、消息的类型,分别生成他们的get和set方法,并且为了方便调试,生成他的tostring方法。

在这里需要注意两点,非常重要!!

1.在这个实体类之前加上@message注解,并且创建他的无参构造函数!!!否则消息是无法被序列化编码再传出去的!!!!!(详情见 https://github.com/msgpack/msgpack-java/issues/226

2.在成员变量前添加@index()标签,以表明数据的顺序,否则会出现类似这样的错误org.msgpack.MessageTypeException:Expected array, but got raw value

这两步非常非常关键,我也是在这两步卡了很久,网上资

最低0.47元/天 解锁文章
Android+PHP+WebSocket 搭建聊天室
XiaoJiang、的博客
04-06 3698
Android 基于web Socket聊天室
基于nettyandroid Socket 聊天室客户端
Stevefat
06-09 2975
公司最近在开发一个移动端的聊天室,c#写的服务端。android 和ios 的客户端,这里用到的socket 通讯,但是socket 的io阻塞导致数据沾包,里一个小伙写了一个解决沾包的问题,但是我看了不是太理想,只有这个项目可以使用,换了其他项目就不能用了。偶然发现netty 这个东西。网上关于这个的资料不多,都是服务端的,android 这边几乎没有发现有用的资料。然后自己写了一个,现在贴出来
netty玩转irving聊天室android整合netty客户端+springboot整合netty服务端),附源码
LuoJun的博客
11-17 3660
什么是NettyNetty一个异步事件驱动的网络应用程序框架 用于快速开发可维护的高性能协议服务器和客户端。 Netty优势: 使用简单:封装了 NIO 的很多细节,使用更简单。 功能强大:预置了多种编解码功能,支持多种主流协议。 定制能力强:可以通过 ChannelHandler 对通信框架进行灵活地扩展。 性能高:通过与其他业界主流的 NIO 框架对比,Netty 的综合性能最优。 稳定:Netty 修复了已经发现的所有 NIO 的 bug,让开发人员可以专注于业务本身。 社区.
Android Netty 教程:搭建与使用
最新发布
gitblog_00577的博客
08-15 370
Android Netty 教程:搭建与使用 android-nettyNetty Client for Android项目地址:https://gitcode.com/gh_mirrors/an/android-netty 1. 项目目录结构及介绍 该项目的目录结构大致如下: android-netty/ ├── app/ │ ├── src/ │ │ ├── main/ │ ...
android———用socket实现简单聊天室可进行私聊(附源码)
a_ittle_pan的博客
07-18 2702
android开发之简单聊天室 前文 本文将介绍怎么使用socket阻塞通信结合多线程来实现一个简单的聊天室。 我这里是用java写的一个服务器端,用android写的客户端。 1.TCP服务器端实现 直接上代码 1.主代码 主代码主要实现了通道(这里本人定义了一个线程类来实现信息的发送和接受)的链接,发送和接受信息,然后通过发送过来的消息来判断是群发还是私发,当中的逻辑实现,各位自己看代码就成,!!!! package com.TCP; import java.io.DataInputStream; i
Android Studio写一个聊天软件(聊天室
ben1010101010的博客
04-21 9889
首先要了解四大组件的概念: Android 开发的四大组件分别是:活动Activity 是提供界面 (UI) 的一种应用组件;服务(service),后台运行服务,不提供界面呈现;广播接收器(Broadcast Receiver),用于接收广播;内容提供者(Content Provider),支持多个应用中存储和读取数据(共享数据),相当于数据库。 app > java > com...
android socket 从零打造一个简单聊天室
qq_42733641的博客
10-23 737
使用socket打造一个聊天室,本人是个小白,过程中遇到的所有问题,我都会进行说明,一切面向和我一样的小白,毕竟大神也不会看这些,先看一看效果 第一种:一个socket服务端,一个客户端,客户端上线,服务端有提示,会打印上线设备的ip 第二种将上面的客户端简单封装后,做成app,服务端不变,不要问我为什么一个一个小,懒得改了 一:好啦,正式开始,我会一步一步的完成这个小东西,以下内容仅适合小...
基于java GUI界面的简易netty聊天室实现群聊私聊
11-18
【标题】基于Java GUI界面的简易Netty聊天室实现群聊私聊功能,通过集成FastJSON库处理JSON格式的数据编码与解码。这个项目旨在为用户提供一个简单易用的聊天平台,用户可以通过图形化界面进行实时通信。下面将...
JAVA Netty实现聊天室+私聊功能
-韧-的博客
06-28 6014
功能介绍 使用Netty框架实现聊天室功能,服务器可监控客户端上下限状态,消息转发。同时实现了点对点私聊功能。技术点我都在代码中做了备注,这里不再重复写了。希望能给想学习netty的同学一点参考。 服务器代码 服务器入口代码 package nio.test.netty.groupChat; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelFuture; import io.netty.channel.Ch
springboot netty-socket-io免费聊天系统
09-16
springboot netty-sockeit-io免费聊天系统,支持一对一,一对多,单独聊,私聊群聊,开箱即用,支持图片、文件发送接收,支持windows、linux,支持pc端、手机端,支持ie8、firefox、chrome任意浏览器 自己安装...
android+netty 的demo
02-10
android端使用netty的demo,详情可以看我的博客http://blog.csdn.net/jan_s
Android-Akaxin是一款开源免费的私有聊天软件可以部署在任意服务器上搭建自己的聊天服务器
08-13
开源聊天软件,DuckChat 和 阿卡信 的开源服务器代码,DC依然在
netty实现简单的聊天
08-09
简单的聊天,是通过netty实现的,包括断线重新连接,初始化管道等等……
基于NettyAndroid点对点聊天软件-源码
04-17
基于NettyAndroid点对点聊天软件-源码 Netty是基于NIO的JAVA异步通讯框架,比Mina在性能上更具有优势,其作者也正是Mina的原作者之一。
基于netty的可群聊聊天室
a11157的博客
08-23 648
主要有两个字段:messageType消息类型,用于区分消息,messageSequenceId,提供一个通信序列号。将消息类型和其对应的Class类存入map,便于后续Gson反序列化使用
Netty实现Android聊天室
bobi1024的博客
04-05 401
Netty实现Android聊天室一.Netty框架二.服务端导入依赖类文件NettyServiceNettyServerHandler三.客户端导入依赖布局文件类文件MainActivityChatClientChatClientHandler 一.Netty框架 Netty一个广受欢迎的异步事件驱动的Java开源网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。为了让NIO处理更好的利用多线程特性,Netty实现了Reactor线程模型。 Reactor模型中有四个核心概念: Reso
netty实现安卓聊天系统(仿qq)
清风
12-31 2309
介绍 经过了前段时间对网络编程和netty框架的学习,也算是有很大的收获,为了巩固知识,所以我写了一个基于netty的实时聊天系统当做课程设计,客户端我是采用的安卓系统,其实大体上并不难,只是根据我们的业务需求写一些crud和界面改动而已。此系统还有很多可以扩展的地方,如rpc调用,群聊等,大家可以自行扩展。 数据库的话我是在服务器上用的mysql,为了简单我使用了mybatis框架,安卓中的数据库SQlit我是没用到的,只是简单的用了键值对的存储方式实现了自动登录,如果...
Android-网络编程-3-使用serversocket建立聊天服务器
qq_43042070的博客
11-23 320
accept方法会造成阻塞,主线程(main)就会被阻塞。 对于阻塞的代码,要给他们放到一个独立的线程中。所以在包中创建一个新的类,叫serverlistener,并且继承一个 类,方法:点击Browse,输入Tread,这样他就是一个线程了 然后写个run再在run中,复制之前的代码 package com.jikexueyuan.testmyserversocket.main; import...
Java Netty 实现聊天室私聊功能详解
本示例代码主要展示了如何利用Netty构建一个聊天室系统,包括群聊功能和私聊功能。这对于学习Netty以及网络编程的开发者来说,具有很好的参考价值。 首先,我们来看聊天室功能的实现Netty服务器会监听客户端的...
写文章

热门文章

  • SpringBoot——Interceptor如何不拦截静态资源 13140
  • Netty+Android搭建一个简易聊天室(实现群聊和私聊) 6203
  • 算法导论 25.3 Johnson算法 4716
  • HashMap、ConcurrentHashMap单线程、多线程遍历时修改的异同 3516
  • 算法导论 24.2 有向无环图的单源最短路径(DAG算法) 2843

分类专栏

  • 算法导论 11篇
  • 踩过的坑 2篇
  • 待解决的问题 1篇
  • MISDream回忆录 5篇
  • Hibernate 2篇
  • Netty 1篇
  • android 1篇
  • Java基础学习 4篇
  • LeetCode 94篇
  • springboot 1篇
  • JRBM 3篇

最新评论

  • Tree——No.110 Balanced Binary Tree

    CSDN-Ada助手: 如何证明一个问题是 NP-Hard 或 NP-Complete?

  • Tree——No.111 Minimum Depth of Binary Tree

    CSDN-Ada助手: 哇, 你的文章质量真不错,值得学习!不过这么高质量的文章, 还值得进一步提升, 以下的改进点你可以参考下: (1)增加条理清晰的目录;(2)提升标题与正文的相关性;(3)使用更多的站内链接。

  • SpringBoot——Interceptor如何不拦截静态资源

    春天熊: 情况一:WebMvcConfigurer 接口实现类上不加 @EnableWebMvc 注解,则拦截器静态资源排除路径类似于 excludePathPatterns("/", "/index.html", "/favicon.ico", "/css/**", "/js/**", "/font/**"),此时直接访问工程上下路径 http://localhost:8080 可跳转到 resource/static/index.html 情况二:WebMvcConfigurer 接口实现类上加上 @EnableWebMvc 注解,则拦截器静态资源排除路径配置为 excludePathPatterns("/static/**"),此时需要在 SpringMVC 的配置上增加默认 Servlet 处理静态资源和视图控制器配置,否则访问 http://localhost:8080 不会跳转到 index.html

  • 算法导论 22.4 拓扑排序

    TransPlus: Really bad implementation

  • SpringBoot——Interceptor如何不拦截静态资源

    橘子花会开�: 牛皮表情包

最新文章

  • House Robber
  • 阿里云docker安装Rocketmq
  • HashMap、ConcurrentHashMap单线程、多线程遍历时修改的异同
2020年3篇
2019年99篇
2018年24篇

目录

目录

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家阿里巴巴玻璃钢雕塑福建创意玻璃钢雕塑供应商湖南镂空校园玻璃钢景观雕塑公司东营玻璃钢海豚雕塑厂家大象玻璃钢雕塑施工方案安康玻璃钢雕塑价格批发清远玻璃钢雕塑行情价格海口玻璃钢小品雕塑四川园林景观玻璃钢雕塑设计通州玻璃钢雕塑厂家滨州玻璃钢雕塑设计山西水景玻璃钢雕塑莆田玻璃钢花盆雕塑公司吕梁玻璃钢雕塑厂家海洋馆门头玻璃钢雕塑怎么提高商场陈列美陈安徽玻璃钢雕塑厂招聘2020年鼠年商场创意美陈固原玻璃钢花盆句容玻璃钢雕塑设计枣庄玻璃钢雕塑定制临沧市玻璃钢雕塑价钱深圳哪家玻璃钢雕塑厂家广东常见商场美陈生产厂家农民玻璃钢雕塑溧阳商场美陈装饰陕西抽象玻璃钢雕塑市场雕塑玻璃钢有甲醛吗芜湖多彩玻璃钢雕塑订做价格酒泉市玻璃钢雕塑香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化