123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- import io.netty.bootstrap.ServerBootstrap;
- import io.netty.channel.*;
- import io.netty.channel.nio.NioEventLoopGroup;
- import io.netty.channel.socket.SocketChannel;
- import io.netty.channel.socket.nio.NioServerSocketChannel;
- import io.netty.handler.codec.string.StringDecoder;
- import io.netty.handler.codec.string.StringEncoder;
- /**
- * 测试客户端
- *
- * @author 修唯xiuwei
- * @create 2018-02-05 15:56
- * @Email 524710549@qq.com
- **/
- public class Server4 {
- public static void main(String[] args) {
- EventLoopGroup boss = new NioEventLoopGroup();
- EventLoopGroup worker = new NioEventLoopGroup();
- try {
- //辅助启动类
- ServerBootstrap bootstrap = new ServerBootstrap();
- //设置线程池
- bootstrap.group(boss, worker);
- //设置socket工厂
- bootstrap.channel(NioServerSocketChannel.class);
- //设置管道工厂
- bootstrap.childHandler(new ChannelInitializer<SocketChannel>() {
- @Override
- protected void initChannel(SocketChannel socketChannel) throws Exception {
- //获取管道
- ChannelPipeline pipeline = socketChannel.pipeline();
- //字符串解码器
- pipeline.addLast(new StringDecoder());
- //字符串编码器
- pipeline.addLast(new StringEncoder());
- //处理类
- pipeline.addLast(new ServerHandler4());
- }
- });
- //设置TCP参数
- //1.链接缓冲池的大小(ServerSocketChannel的设置)
- bootstrap.option(ChannelOption.SO_BACKLOG, 1024);
- //维持链接的活跃,清除死链接(SocketChannel的设置)
- bootstrap.childOption(ChannelOption.SO_KEEPALIVE, true);
- //关闭延迟发送
- bootstrap.childOption(ChannelOption.TCP_NODELAY, true);
- //绑定端口
- ChannelFuture future = bootstrap.bind(9001).sync();
- System.out.println("server start ...... ");
- //等待服务端监听端口关闭
- future.channel().closeFuture().sync();
- } catch (InterruptedException e) {
- e.printStackTrace();
- } finally {
- //优雅退出,释放线程池资源
- boss.shutdownGracefully();
- worker.shutdownGracefully();
- }
- }
- }
- class ServerHandler4 extends SimpleChannelInboundHandler<String> {
- //读取客户端发送的数据
- @Override
- protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
- System.out.println("client response :" + msg);
- }
- //新客户端接入
- @Override
- public void channelActive(ChannelHandlerContext ctx) throws Exception {
- System.out.println("channelActive");
- }
- //客户端断开
- @Override
- public void channelInactive(ChannelHandlerContext ctx) throws Exception {
- System.out.println("channelInactive");
- }
- //异常
- @Override
- public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
- //关闭通道
- ctx.channel().close();
- //打印异常
- cause.printStackTrace();
- }
- }
|