您好,欢迎来到12图资源库!分享精神,快乐你我!我们只是素材的搬运工!!
  • 首 页
  • 当前位置:首页 > 开发 > WEB开发 >
    基于 Kotlin 完成一个复杂的 TCP 自定义协议(2)
    时间:2020-09-18 12:05 来源:网络整理 作者:网络 浏览:收藏 挑错 推荐 打印

            //组装报文:魔数(4字节)+ 版本号(1字节)+ 序列化方式(1字节)+ 指令(1字节)+ 数据长度(4字节)+ 数据(N字节) 

            buf.writeInt(MAGIC_NUMBER) 

            buf.writeByte(packet.version.toInt()) 

            buf.writeByte(packet.serializeMethod.toInt()) 

            buf.writeByte(packet.command.toInt()) 

            buf.writeInt(bytes.size

            buf.writeBytes(bytes) 

            return buf 

        } 

        fun decode(buf:ByteBuf): Packet { 

            buf.skipBytes(4) // 魔数由独自的 Handler 停止校验 

            buf.skipBytes(1) 

            val serializationMethod = buf.readByte() 

            val serializer = SerializerFactory.getSerializer(serializationMethod) 

            val command = buf.readByte() 

            val clazz = PacketFactory.getPacket(command) 

            val length = buf.readInt()  // 数据的长度 

            val bytes = ByteArray(length)   // 定义需求读取的字符数组 

            buf.readBytes(bytes) 

            return serializer.deserialize(clazz, bytes) 

        } 

    三. TCP 效劳端

    启动 TCP 效劳的办法

    fun execute() { 

        boss = NioEventLoopGroup()        worker = NioEventLoopGroup()        val bootstrap = ServerBootstrap() 

        bootstrap.group(boss, worker).channel(NioServerSocketChannel::class.java) 

                .option(ChannelOption.SO_BACKLOG, 100) 

                .childOption(ChannelOption.SO_KEEPALIVE, true

                .childOption(ChannelOption.SO_REUSEADDR, true

                .childOption(ChannelOption.TCP_NODELAY, true

                .childHandler(object : ChannelInitializer<NioSocketChannel>() { 

                    @Throws(Exception::class) 

    (责任编辑:admin)