游戏中tcp消息使用byte字节数组传输

    通讯消息不像是web那样直接使用文本,比较多的形式使用字节byte进行传输,形如下面的形式
        0,1, 0,2 ,0,0,0,8, 0,0,1,1 ,0,0,0,3
    根据客户端与服务端定义的协议,去读取byte数组,
    比如定好消息格式为
        消息号+状态码+内容长度+内容
        (messageId+statusCode+length+body)
        (short+short+int+byte[])
        基本类型字节所占的长度
            boolean 1
            short     2
            int     4
            float    4
            long    8
    所以按照这种消息格式,我们可以去解析上面的消息例子
        消息号为  0,1,转为short就是 1
        状态码为  0,2,转为short就是 2
        长度为    0,0,0,8,转为int就是 8
        根据长度,就可以得知内容body的长度为8,所以就是一个byte[8]的数组,后面就是0,0,1,1 ,0,0,0,3,这个假设是2个int,转出来的值就是257,3
    
    然后看下这几个参数
        消息号:web里面对不同的网址进行了区分,然后根据后面所加的内容进行查找,比如http://127.0.0.1:8088/projectname/index?pcmd=aaa、这样能根据index或者pcmd找到对应的方法进行调用。
            但是在tcp协议中没有这样的网址,一般我们只是暴露出个端口和ip,所以我们只能在消息中添加一个消息号,根据消息号的不同进行不同的操作。
        状态码:在web项目中,我们会有404(找不到页面),403(权限不对)相关的状态码,我们这边也是这么加的,
            我们就可以提前定一个状态码--未登录,比如900。比如玩家需要操作一个数据,但是他已经掉线了,这时候就返回这个状态码给他,跟在消息号后面
        内容及长度,内容是我们具体要发送的东西,假设上面的例子是要发送 玩家id和玩家金币(顺序定死),那么玩家id就是257,金币值就是3

猜你喜欢

转载自blog.csdn.net/cmqwan/article/details/81104503