Netty的深入浅出--4.实现简单的聊天程序

本文详细介绍了使用Netty实现简单聊天程序的过程。包括服务端的创建,如解码器设置、自定义处理器实现客户端上线和下线广播等功能;还介绍了客户端的编写,如管道初始化器配置、管道处理器设置等。最后启动服务器和客户端,可实现多客户端聊天。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

聊天程序的服务端:

创建一个MyChatServer的main函数:

 创建解码器DelimiterBasedFrameDecoder(根据分隔符将消息解码)

 对于该解码器后续在进行详细讲解,现在只要知道这是干嘛的就行了

 

下面这些就是字符的编码和解码类型设置

 

将管道初始化器加入到MyChatServer主函数中:

创建自定义处理器MyChatServerHandler

 

下面将会实现的需求是:当客户端A与服务器 建立连接之后,客户端B与服务器建立连接,这时候服务器会发广播告诉客户端A:客户端B上线。客户端C与服务器建立连接,这时候服务器发广播告诉服务端A、服务端B:客户端C上线

 

创建一个管理管道的组

 通过DefaultChannelGroup来构造的

 其中传入的GlobalExecutor.INSTANCE实例

而这个实例就是类本身

将与服务器建立好连接的所有客户端保存:

 

 将信息发送到所有组内已经连接了的客户端中:

 查看writeAndFlush,它是由write和flush组成

说明信息: 将信息发送给所有连接这的channel(客户端)

 这里说明一下,writeAndFlush在add方法的前面:因为在添加channel之前发送广播的话,广播就不会发送给当前channel本身了。

当客户端断开之后,广播给其他用户 

很多人会疑问这个处理器是自己定义的,为什么会自动调用呢?这些内容后面会写,大家不要着急,现在只是了解一下netty中一些类型和组件的使用。

打印连接成功之后,上线的客户端:

打印客户端断开连接之后,下线 的客户端

下面这个channel就是当前向服务器端发送消息 的客户端:

区别当前客户端和其他客户端,并且将消息发送给所有客户端 

 将MyChatServerHandle放入到管道初始化器MyChatServerInitializer中

到这里聊天程序的服务端 已经完成

编写聊天程序的客服端:

创建MyClient客服端主函数:

 创建管道初始化器MyChatClientInitializer(配置和服务端管道初始化器是一样的)

将管道初始化器加入到MyChatClient中:

 创建管道处理器MyChatClientHandler

直接打印控制台给它返回的 信息就ok了:

在管道初始化器中加入自定义管道处理器MyChatClientHandler

 

这个关闭就不用了,我们直接使用死循环

 

不断读取用户在控制台输入的参数

 

启动服务器、客服端

 

打开多个客服端

 

输入信息:

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值