2011-12-02 30 views
2

我在C++中編寫了一個websocket服務器,它可以與websocket協議00(握手標頭中的key1,key2)協同工作。Websocket版本8 Sec-WebSocket-Accept不匹配

現在,隨着新的更新,我正在嘗試爲新的方式握手工作做同樣的事情。這是我的服務器對握手請求的響應:

「HTTP/1.1 101交換協議\ r \ n升級:websocket \ r \ n連接:升級\ r \ nSec-WebSocket-Accept:」+ serverKey +「\ r \ ñ\ r \ n「個;

其中serverkey正確計算。作爲一個例子:

握手請求:
GET /測試HTTP/1.1
升級:網頁套接字
連接:升級
主機:192.168.123.102:8585
仲丁基的WebSocket-產地: http://192.168.123.5
二段的WebSocket密鑰:YB0mPvJ5t8ggCeGUWY39uQ ==
二段的WebSocket-版本:8

握手響應頭:
HTTP/1.1 101交換協議
升級:網頁套接字
連接:升級
仲丁基的WebSocket - 接受:xt9iyCNryQTseELUkHPWjzxA2ts =

我還檢查我ALGO以http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-08爲例,它產生了完全相同的響應。

但是我仍然得到以下錯誤:
「錯誤的WebSocket握手期間:二段的WebSocket,接受不匹配」

我使用鉻作爲15我的瀏覽器。

你有什麼想法出了什麼問題?

(也Chrome檢查網絡,它並沒有顯示這是當它不接受握手(甚至與舊版本)的情況下,響應)

回答

1

我居然發現了什麼是首要解決的問題。

,我使用base64編碼的關鍵是

YB0mPvJ5t8ggCeGUWY39uQ== 
258EAFA5-E914-47DA-95CA-C5AB0DC85B11 

,而不是

YB0mPvJ5t8ggCeGUWY39uQ==258EAFA5-E914-47DA-95CA-C5AB0DC85B11 

一個額外的\ n爲整個問題。

但是,現在我收到連接消息(ws客戶端已成功連接到ws服務器)我無法發送或接收任何內容。問題是服務器端

你知道自舊的websocket協議以來服務器端發生了什麼變化嗎?我只改變了我的握手迴應,似乎不夠。