美文网首页
Android使用netty接收处理类似808数据

Android使用netty接收处理类似808数据

作者: Android戴勤学 | 来源:发表于2024-05-06 14:10 被阅读0次

    1.导入netty.jar包;

    2.新建tcpk服务器端

    public class TsTCPServer {
        private static Logger log = new Logger();
        private volatile static boolean isRunning = false;
    
        private static EventLoopGroup bossGroup = null;
        private static EventLoopGroup workerGroup = null;
        //端口号
        private static int port = 7777;
    
        public TsTCPServer() {
        }
    
        private static void bind() throws Exception {
            bossGroup = new NioEventLoopGroup();
            workerGroup = new NioEventLoopGroup();
            ServerBootstrap serverBootstrap = new ServerBootstrap();
            serverBootstrap.group(bossGroup, workerGroup)//
                    .channel(NioServerSocketChannel.class) //
                    .childHandler(new ChannelInitializer<SocketChannel>() { //
                        @Override
                        public void initChannel(SocketChannel ch) throws Exception {
                            ch.pipeline().addLast("idleStateHandler",
                                    new IdleStateHandler(TPMSConsts.tcp_client_idle_minutes, 0, 0, TimeUnit.MINUTES));
                            ch.pipeline().addLast(new TsDecoder4LoggingOnly());
                            // 1024表示单条消息的最大长度,解码器在查找分隔符的时候,达到该长度还没找到的话会抛异常
                            ch.pipeline().addLast(
                                    new DelimiterBasedFrameDecoder(1024, Unpooled.copiedBuffer(new byte[]{0x7e}),
                                            Unpooled.copiedBuffer(new byte[]{0x7e, 0x7e})));
                            ch.pipeline().addLast(new TsServerHandler());
                        }
                    }).option(ChannelOption.SO_BACKLOG, 128) //
                    .childOption(ChannelOption.SO_KEEPALIVE, true);
    
            log.info("国标808TCP服务启动完毕,port={}", port);
            ChannelFuture channelFuture = serverBootstrap.bind(port).sync();
    
            channelFuture.channel().closeFuture().sync();
        }
    
        public synchronized static void startServer() {
            if (isRunning) {
    //            throw new IllegalStateException(getName() + " is already started .");
            return;
            }
            isRunning = true;
    
            new Thread(() -> {
                try {
                    bind();
                } catch (Exception e) {
                    log.info("TCP服务启动出错:{}", e.getMessage());
                    e.printStackTrace();
                }
            }, getName()).start();
        }
    
        public synchronized static void stopServer() {
            if (!isRunning) {
                throw new IllegalStateException(getName() + " is not yet started .");
            }
            isRunning = false;
    
            try {
                Future<?> future = workerGroup.shutdownGracefully().await();
                if (!future.isSuccess()) {
                    log.error("workerGroup 无法正常停止:{}", future.cause());
                }
    
                future = bossGroup.shutdownGracefully().await();
                if (!future.isSuccess()) {
                    log.error("bossGroup 无法正常停止:{}", future.cause());
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
    
            log.info("TCP服务已经停止...");
        }
    
        private static String getName() {
            return "Jt808TCPServer";
        }
    
    }
    

    相关文章

      网友评论

          本文标题:Android使用netty接收处理类似808数据

          本文链接:https://www.haomeiwen.com/subject/xbvlfjtx.html