2012-02-09 62 views
1

我正在寫一個使用c + +的websocket服務器,我在握手中使用chrome 17作爲客戶端。websocket handshake

當服務器發送客戶端的握手迴應鉻始終顯示在下面的控制檯錯誤:

期間的WebSocket握手

錯誤:二段的WebSocket,接受不匹配

Chrome瀏覽器中的事件是如下:

t=1328796971951 [st= 5] WEB_SOCKET_SEND_REQUEST_HEADERS 
--> GET/HTTP/1.1 
Upgrade: websocket 
Connection: Upgrade 
Host: 127.0.0.1:38950 
Origin: null  
Sec-WebSocket-Key: zMb+UCeRb+2OmMp9fpbxHw== 
Sec-WebSocket-Version: 13 

t=1328796971951 [st= 5] SOCKET_STREAM_SENT  
t=1328796971971 [st=25] SOCKET_STREAM_RECEIVED 
t=1328796971971 [st=25] WEB_SOCKET_READ_RESPONSE_HEADERS 
--> HTTP/1.1 101 Switching Protocols 
Upgrade: WebSocket 
Connection: Upgrade 
Sec-WebSocket-Accept: 4emBYsdkl0SxeUMGLNc0dFsI1/E= 


t=1328796971972 [st=26] -REQUEST_ALIVE 

請幫忙。

+1

您發送的接受報頭中的值是錯誤的。你需要顯示你的代碼來計算accept值,否則我們不知道你在做什麼錯誤。 – kanaka 2012-02-09 15:17:42

+0

謝謝,你說得對,服務器發送錯誤的密鑰。 – 2012-02-10 03:19:43

+0

當計算密鑰時,輸入密鑰以'/ r/n'結束,這就是我總是輸出錯誤的原因。 – 2012-02-10 03:20:49

回答

1

Sec-WebSocket-Accept值未正確計算。

如何計算值(僞):

// Getting the Sec-WebSocket-Key from the Request header 
var sec_Websocket_Key = requestHeader["Sec-WebSocket-Key"]; 
// Adding the magic string to sec_Websocket_key 
// sha1 hash this new value 
var sec_Websocket_Key_Hash = (sec_Websocket-Key + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11").sha1(); 
// Get the Base64 String of the hash 
var sec_Websocket_Accept = sec_Websocket_Key_Hash.toBase64String(); 
// sec_Websocket_Accept now is the correct value to set in the Header 

獲取更多的信息here