2012-02-09 28 views
1

私はWebSocketサーバーをC++で作成していますが、私はクライアントとしてクロム17を使用してハンドシェークで係属中でした。 WebSocketハンドシェイク中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

を取得します。受け入れ値を計算するためのコードを表示する必要があります。それ以外の場合、間違っていることはわかりません。 – kanaka

+0

ありがとう、あなたは正しい、サーバーが間違ったキーを送信します。 –

+0

キーを計算すると、入力キーは '/ r/n'で終わります。これが私が常に間違った出力をする理由です。 –

答えて

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

関連する問題