AS3-網路遊戲製作- 封包講解(1)

flash網路遊戲已遍佈世界各角落,技術再也不是隱藏且困難的事,
早已應該將其詳細內容解說,一直拖至今日終於有時間整理出給
各位網友參考,希望可以利用其技術發展更多的應用與創意多媒體遊戲!


封包的拆解與學習 , 是網路遊戲製作前必要的基礎,你可以不必了解太深
但基本原理一定要透徹瞭解,再第二篇教學時才可以學習其原理,自己加以
變化其中結構變成自己的東西!


封包的傳遞在網路間是以微小的 bit (單位)在做傳送, 再組合成更大的單位
1 bytes(8bits),而且在傳送時是連續不停的發送,連續的bytes傳送給接收者
,然而 以flash例子來說 , 雖然 as3可以處理uint(bit)資訊,但後續應用與
處理上相當的麻煩,當然也是有人利用bit來做處理資料,以加快傳輸速度,下面
透過一些圖可以幫助更加瞭解!


事實上網路遊戲整體控制,有著  Server(伺服器端) 與  Client(客戶端) 互相溝通
訊息而完成動作,Client端只負責接收數據,呈現其效果,重要的商業邏輯驗證都會
在伺服器端完成,以防止駭客或資料被竄改



Server 將內容送給 Client 端時,接收的 Client 端會收到一個一個byte的形式數據
然而我們會不知到這些一連串的bytes , 隱藏的結構內容是如何
, 如下左圖

所謂隱藏的結構內容,假設我們設計者可以預先知道(當然如果是hack就必須自行拆解)
假設我們以下右圖為例,預先知道其結構是byte , short , int , string(5)

那麼,我們在解封包時,便可以依照不同型態的長度來解開封包內容!




上面我們可以看到封包旁的紅色數字,

第一個結構型態是byte所以我們將第1個接收到的封包拆解(讀成byte型態),
第二個結構型態是short,short占 2bytes, 所以我們將接收到的第2到第3byte讀成short
第三個結構型態是int, int占 4bytes , 接收到的第4到7讀成int.
第四個結構型態是string , string是字串,字串的長度不定,假設我們這裡預先知道它長
度是 5 ,那麼我們在接string時可以依語言寫法填上5的長度值


型態有許多種,各位網友可以參考adobe as3可以閱讀的型態種類
http://help.adobe.com/zh_TW/FlashPlatform/reference/actionscript/3/flash/utils/ByteArray.html#readDouble%28%29

(32位元長度 表示4bytes , 64位元就是8bytes , 裡面的 double 就是占8bytes )

註:這裡的表示型態是以flash為基準,舉例在C語言傳送一個char型態,對flash來說就等於是一個byte
   不同語言,各型態之間的對應,都是需要注意的地方!




最後各位注意到圖最左邊畫了bit , 1 bytes = 8 bits , 假設我們將數據塞進 bit 來
做為傳送解讀的依據,可以大大的減少封包傳送的流量,因為1bytes就可以裝載
8個數據,不必再使用8bytes來裝
( 當然只有在特定情況 , 且使用維護上不易 )


2 則留言: