關於 AS3 Socket 通訊基礎(四)

2021-09-02 10:23:38 字數 2048 閱讀 1688

4.同socket伺服器進行握手,並確定收到了什麼樣的資料和如何處理這些資料. 

建立不同的常量來宣告協議的狀態.使用這些常量將指定的處理函式對映到相應的狀態.在乙個socketdata事件控制器中,通過狀態對映呼叫這些函式的. 

建立socket連線通常要處理握手這個環節.尤其是在伺服器初始化需要向客戶端傳送資料.然後客戶端通過一種特殊的方式相應這些資料,接著伺服器因此再次響應.整個處理過程直到握手完成並且建立起乙個"正常的"連線為止.

處理伺服器的不同響應是非難的,主要的原因是socketdata事件控制器不能儲存上下文的順序.也就是說,伺服器的響應不會告訴你"為什麼"響應, 也不告訴你這些響應資料被那個處理程式來處理.要想知道如何處理這些從伺服器返回的響應不能從響應的本身來獲得,尤其在響應變化的時候.或許乙個響應返回 了兩個位元組碼,另乙個返回了乙個整數值還跟了乙個雙精度浮點數.這樣看來讓響應本身處理自己是一大難題.

我們通過建立乙個狀態量來標註不同的上下文,伺服器通過這些上下文將資料傳送到客戶端.與這些狀態量都有乙個相關聯的函式來處理該資料,這樣你就可以很輕鬆的按照當前的協議狀態去呼叫正確的處理函式.

當你要與乙個socket伺服器建立連線需要考慮如下幾個步驟: 

1.當與伺服器連線的時候,伺服器立刻返回乙個標誌伺服器可以支援的最高協議版本號的整數值. 

2.客戶端在響應的時候會返回乙個實際使用協議的版本號. 

3.伺服器返回乙個8byte的鑑定碼. 

4.然後客戶端將這鑑定碼返回到伺服器. 

5.如果客戶端的響應不是伺服器端所期望的,或者,就在這個時候該協議變成了乙個常規操作模式,於是握手結束. 

實際上在第四步可以在鑑定碼中包含更多的安全響應.你可以通過傳送各種加密方法的密匙來代替逐個傳送的鑑定碼.這通常使用在客戶端向使用者索要密碼的時候, 然後密碼成為了加密過的8byte鑑定碼.該加密過的鑑定碼接著返回到伺服器.如果響應的鑑定碼匙伺服器所期望的,客戶端就知道該密碼是正確的,然後同意 建立連線.

實現握手框架,你首先要為處理從伺服器返回的不同型別的資料分別建立常量.首先,你要從步驟1確定版本號.然後從步驟3收取鑑定碼.最後就是步驟5的常規操作模式.我們可以宣告

如下常量: 

public const determine_version:int = 0; 

public const receive_challenge:int = 1; 

public const normal:int = 2; 

常量的值並不重要,重要的是這些值要是不同的值,兩兩之間不能有相同的整數值. 

下乙個步驟我們就要為不同的資料建立不同處理函式了.建立的這三個函式分別被命名為readversion( ), readchallenge( ) 和 readnormalprotocol( ). 建立完這三個函式後,我們就必須將這三個函式分別對映到前面不同狀態常量,從而分別處理在該狀態中收到的資料.**如下:

statemap = new object(   ); 

statemap[ determine_version ] = readversion; 

statemap[ receive_challenge ] = readchallenge; 

statemap[ normal             ] = readnormalprotocol; 

最後一步是編寫socketdata事件處理控制器,只有通過這樣的方式,建立在當前協議狀態之上的正確的處理函式才可以被呼叫.首先需要建立乙個 currentstate的int變數.然後使用statemap去查詢與currentstate相關聯的函式,這樣處理函式就可以被正確呼叫了.

var processfunc:function = statemap[ currentstate ];

package

private function onsocketdata( eventrogressevent ):void

private function readversion( ):void

private function readchallenge( ):void

private function readnormalprotocol( ):void }}

複製**

as3 socket 跨域連線

socket跨域連線 例如 189.45.3.11上的swf socket程式訪問,345.22.345.8伺服器上的socket的服務端程式,這就是跨域連線 關於as3 socket跨域連線的時候如何解決跨域安全沙箱限制問題,網路上有很多方法。這裡說點,需要注意的事項 作為socket serve...

AS3 Socket 漢字亂碼深入研究

正所謂眼見為實,耳聽為虛,在程式設計開發時,聽別人說的東西一定要自己進行驗證。因為網路這個東西,跟風的東西太多,以訛傳訛的事情比比皆是。近來 在做as3 與.net 的socket 通訊工作,相繼解決了通訊協議解析和資料粘包等問題,終於要跟漢字編碼這個問題一爭高下了。在經歷了一番深入研究之後,我終於...

Socket通訊基礎

socket通訊傳遞資料 服務端 using system.net using system.net.sockets using system.text using system.threading thread mythread socket socket 清理所有正在使用的資源。protecte...