WebSocket握手協議

  1. 客戶端握手請求(注意:鍵值之間有一個空格,行間有換行符號0x13x10或者說\r\n)
    GET /WebSocket/LiveVideo HTTP/1.1
    Upgrade: WebSocket
    Connection: Upgrade
    Host: localhost:8080 (客戶端請求主機)
    Origin: http://127.0.0.1 (來源網頁地址)
    Sec-WebSocket-Key1: 23 asdfJKj,asdjk
    Sec_WebSocket-Key2: wewerw234 jij998
    0x13x10 + 8個字節Sec_WebSocket-Key3值,沒有鍵名(注意,這裏的0x13x10的額外的,也就說有兩個連續的0x13x10)
  2. 服務端握手回覆
    HTTP/1.1 101 Web Socket Protocol Handshake
    Upgrade: WebSocket
    Connection: Upgrade
    Sec-WebSocket-Origin: http://127.0.0.1 (來源網頁地址)
    Sec-WebSocket-Location: ws://localhost:8080/WebSocket/LiveVideo 16個字節的加密KEY

加密KEY算法:

Sec_WebSocket-Key1的產生方式:
(1)提取客戶端請求的Sec_WebSocket-Key1中的數字符組成字符串k1
(2)轉換字符串爲8個字節的長整型intKey1
(3)統計客戶端請求的Sec_WebSocket-Key1中的空格數k1Spaces
(4)intK1/k1Spaces取整k1FinalNum
(5)將k1FinalNum轉換成字節數組再反轉最終形成4個字節的>Sec_WebSocket-Key1

Sec_WebSocket-Key2的產生方式:
(1)提取客戶端請求的Sec_WebSocket-Key2中的數字符組成字符串k2
(2)轉換字符串爲8個字節的長整型intKey2
(3)統計客戶端請求的Sec_WebSocket-Key2中的空格數k2Spaces
(4)intK2/k2Spaces取整k2FinalNum
(5)將k2FinalNum轉換成字節數組再反轉最終形成4個字節的Sec_WebSocket-Key2

Sec_WebSocket-Key3的產生方式:
客戶端握手請求的最後8個字節

將Sec_WebSocket-Key1、Sec_WebSocket-Key2、>Sec_WebSocket-Key3合併成一個16字節數組
再進行MD5加密形成最終的16個字節的加密KEY

  1. 消息發送接收
    客戶端和服務端發送非握手文本消息時,消息以utf-8編碼,並以0x00開頭,0xFF結尾。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章