6.2 服务端读取客户端数据

在服务端启动流程这一章,我们提到,服务端相关的数据处理逻辑是通过ServerBootstrap的childHandler()方法指定的。

现在,我们在initChannel()方法里给服务端添加一个逻辑处理器,这个处理器的作用就是负责读取客户端发来的数据。

这个方法里的逻辑和客户端侧类似,获取服务端侧关于这个连接的逻辑处理链Pipeline,然后添加一个逻辑处理器,负责读取客户端发来的数据。

服务端侧的逻辑处理器同样继承自ChannelInboundHandlerAdapter。与客户端不同的是,这里覆盖的方法是channelRead(),这个方法在接收到客户端发来的数据之后被回调。

这里的msg参数指的就是Netty里数据读写的载体,为什么这里不直接是ByteBuf,而需要强转一下呢?我们后面会分析到。这里我们强转之后,调用byteBuf.toString()就能够获得客户端发来的字符串数据。

我们先运行服务端,再运行客户端,下面两个图分别是服务端控制台和客户端控制台的输出。

服务端

客户端

到目前为止,我们已经实现了客户端发送数据和服务端打印,离本章开头提出的目标还差一半,接下来我们实现另外一半目标:服务端收到数据之后向客户端返回数据。