2014-09-06 24 views
0

我知道ENCODED是字節數組,但什麼是MASK,他的值是什麼?什麼是解碼websocket框架的掩碼值?

var DECODED = ""; 
    for (var i = 0; i < ENCODED.length; i++) { 
     DECODED[i] = ENCODED[i]^MASK[i % 4]; 
    } 

我在網上發現了這個例子,問題是我怎麼知道什麼是MASK值?

請提供任何提示或鏈接?但在谷歌的例子,我覺得只有這種類型的代碼,但我希望看到明確的屏蔽值,任何幫助,請

pstream = new BufferedWriter(new OutputStreamWriter(csocket.getOutputStream(), StandardCharsets.UTF_8)); 

    char[] buff = new char[4]; 

    pstream.read(buf); 

//now buf have that masks? 
+0

?什麼代碼編碼數據?爲什麼你使用字符串作爲字節數組呢? – Bergi 2014-09-06 17:09:52

+0

@Bergi https://developer.mozilla.org/en-US/docs/WebSockets/Writing_WebSocket_servers#Reading_and_Unmasking_the_Data - 你能檢查嗎,有這個代碼,但我不明白什麼是MASK值,有什麼想法?因爲我不明白他們從哪裏弄到MASK陣列,我無法進一步學習,因爲我被困在這個 – TrueClicker 2014-09-06 17:11:36

回答

0

右上面的代碼片斷,它說:

如果MASK (應該是,對於客戶端到服務器的消息),讀取接下來的4個八比特組(32比特);這是屏蔽鍵

您可以在data frame format description中找到MASK位。

所以你從哪裏得到這些代碼的僞代碼可以擴展到

 
var LEN = decodeLength(buffer) ; 
var MASK = buffer.read(4); 
var ENCODED = buffer.read(LEN); 
var DECODED = new Buffer(LEN); 
for (var i = 0; i < ENCODED.length; i++) { 
    DECODED[i] = ENCODED[i]^MASK[i % 4]; 
} 
+0

非常感謝你的解釋,讓我問一個更多的問題(導致它的一個對我來說有點複雜),所以據我瞭解,如果我有一個BufferedReader閱讀器在Java中,我可以通過使用reader.read(buf)緩衝區大小爲4讀取該掩碼數據? – TrueClicker 2014-09-06 17:32:58

+0

代碼已更新,請您檢查一下我是否正確地在java中讀取它? – TrueClicker 2014-09-06 17:38:31

+0

是的,掩碼(如果存在)是32位,需要異或到數據中進行解碼。然而,我不知道在Java中使用什麼。你真的應該用Java而不是JavaScript標記問題! – Bergi 2014-09-06 18:38:59