1. 程式人生 > >遊戲中tcp訊息使用byte位元組陣列傳輸

遊戲中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