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

聊天程序的服务端:

创建一个MyChatServer的main函数:

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

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

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

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

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

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

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

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

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

创建自定义处理器MyChatServerHandler

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

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

 

创建一个管理管道的组

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

 通过DefaultChannelGroup来构造的

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

 其中传入的GlobalExecutor.INSTANCE实例Netty的深入浅出--4.实现简单的聊天程序

而这个实例就是类本身

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

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

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

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

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

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

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

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

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

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

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

当客户端断开之后,广播给其他用户Netty的深入浅出--4.实现简单的聊天程序 

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

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

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

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

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

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

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

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

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

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

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

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

编写聊天程序的客服端:

创建MyClient客服端主函数:

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

 创建管道初始化器MyChatClientInitializer(配置和服务端管道初始化器是一样的)Netty的深入浅出--4.实现简单的聊天程序

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

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

 创建管道处理器MyChatClientHandler

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

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

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

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

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

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

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

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

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

启动服务器、客服端

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

打开多个客服端

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

输入信息:

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

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

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