Netty4.0客户端和服务器搭建

一、服务器,客户端搭建


1.1用到的类

TestServer中声明

EventLoopGroup boss = new NioEventLoopGroup()   线程组: 作用1、服务器接收客户端连接2、SocketChannel的网络读写 

第一个经常被叫做‘boss’,用来接收进来的连接。第二个经常被叫做‘worker’,用来处理已经被接收的连接,一旦‘boss’接收到连接,就会把连接信息注册到‘worker’上


ServerBootStrap,Bootstrap    启动NIO服务端/客户端,添加handler,group,option等参数

NioServerSocketChannel
NioSocketChannel    childOption不需要

channelOption
backlog       参数指定了访问队列数量的大小
tcpNoDelay 使用于小数据即时传输,于TCP_NODELAY相对应的是TCP_CORK;

                    该选项是需要等到发送的数据量最大的时候,一次性发送
keepAlive 当设置该选项以后,如果在两小时内没有数据的通信时,TCP会自动发送一个活动探测数据报文

TestServerHandler中声明

ChannelInboundHandler 提供了许多事件处理的接口方法,我们可以继承重写

常用函数:

channelread 和 channelActive 的区别
在channelActive中,管道(管道里接handler来处理事情),//连接被建立并且准备进行通信时被调用

 

在channelRead中,管道在读取ByteBuffer的数据时,可以采取以下处理

channelRead(ChannelHandlerContext ctx, Object msg) 
ByteBuf in = (ByteBuf) msg;  //读取从客户端发来的消息
if(in.isreadable())

ChannelHandlerContext 
ctx.write(msg) //逐字地把接受到的消息写入
ctx.flush() //把缓冲区中数据强行输出


ChannelHandlerContext.write() (和 writeAndFlush() )方法会返回一个 ChannelFuture 对象,一个 ChannelFuture 代表了一个还没有发生的 I/O 操作。这意味着任何一个请求操作都不会马上被执行,

 

1.2遇到的问题和思考

客户端和服务器如何相互传输??

答:首先我们搭建好服务器和客户端,并设置好handler的种类和个数socketChannel.pipeline().addLast(new TestClientHandler()),然后在handler里重写管道的相关方法ChannelActive,ChannelRead()等
测试:我们可以利用telnet访问我们设置好的服务器地址,然后输入若干信息,我们可以在控制台看到一样的信息输出,这是由于服务器的处理类中channelRead()实现了相应的操作。   如果是在客户端实现的channelRead,那么system.out.print()函数里的打印内容在ctx.close()关闭之后会发送给服务器,由服务器进行读取

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值