2012-03-18 43 views
3

有人知道客戶端發送給websocket服務器的消息的編碼類型是什麼?當客戶端向websocket服務器發送消息時,什麼是編碼類型?

,我是學這個網站

http://blogs.claritycon.com/blog/2012/01/18/websockets-with-rfc-6455/

,並從這個網站教我,下面的代碼解碼在服務器端從客戶得到的消息!

public string HybiDecode(byte[] data) 
{ 
    byte firstByte = data[0]; 
    byte secondByte = data[1]; 
    int opcode = firstByte & 0x0F; 
    bool isMasked = ((firstByte & 128) == 128); 
    int payloadLength = secondByte & 0x7F; 

    if (!isMasked) { return null; } // not masked 
    if (opcode != 1) { return null; } // not text 

    List<int> mask = new List<int>(); 
    for (int i = 2; i < 6; i++) 
    { 
     mask.Add(data[i]); 
    } 
    int payloadOffset = 6; 
    int dataLength = payloadLength + payloadOffset; 

    List<int> unmaskedPayload = new List<int>(); 
    for (int i = payloadOffset; i < dataLength; i++) 
    { 
     int j = i - payloadOffset; 
     unmaskedPayload.Add(data[i]^mask[j % 4]); 
    } 

    return ToAscii(unmaskedPayload.Select(e => (byte)e).ToArray()); 
} 

public string ToAscii(byte[] data) 
{ 
    System.Text.ASCIIEncoding decoder = new System.Text.ASCIIEncoding(); 
    return decoder.GetString(data, 0, data.Length); 
} 

,但現在我在C語言正在學習,所以我必須toascii將()轉換爲C語言! 但是...從什麼?從unicode到ASCII或從utf-8到ASCII? 如果你知道這個,你能告訴我嗎?

回答

4

消息以utf-8傳輸。有關詳細信息,請參閱規格的section 5.6

它取決於你在你的服務器中使用什麼編碼。 UTF-8在C中很容易處理(它仍然由單個nul字符終止,因此所有字符串函數都可以工作),因此您可能會發現在代碼中使用UTF-8最簡單,並且不會轉換爲ascii/unicode。

+0

我使用的是Ubuntu linux,而且我知道這是utf-8系統。 你意味着我不需要任何轉換來查看服務器端的數據? p.s:我有點名氣可以提高箭頭! ^^今天謝謝你的答覆! – nathan 2012-03-18 15:23:50

+0

我完成了!謝謝!! – nathan 2012-03-19 02:10:06

相關問題