2012-02-09 2 views
1

Я пишу сервер websocket с использованием C++, я ожидал в рукопожатии использовать chrome 17 в качестве клиента.websocket handshake

Когда сервер отправить клиент хром ответа рукопожатия всегда показывает ошибку ниже в консоли:

Ошибки при WebSocket рукопожатия: Sec-WebSocket-Accept рассогласования

события в хроме, как показано ниже:

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

+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

Смежные вопросы