websockets visual studio socket servidor net mvc example asp javascript c++ websocket

javascript - visual - Apretón de manos de Websocket El valor del encabezado Sec-WebSocket-Accept es incorrecto



websocket mvc 5 (1)

Estoy escribiendo un servidor websocket c ++, las herramientas dev en Chrome dice que el valor del encabezado sec-websocket-accept es incorrecto. He probado durante días y todo parece estar bien. El cliente cierra con readystate 3 sin que se llame al websocket onopen aunque se muestre como 101 en las herramientas chrome dev.

Este es mi código para calcular las claves

string magickey = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"; string key = msgkey.append(magickey); unsigned char* sha_str = SHA1(reinterpret_cast<const unsigned char*>(key.c_str()), key.length(), nullptr); string acceptkey = base64_encode(reinterpret_cast<const unsigned char*>(sha_str), strlen((char*)sha_str)); string handshake_response = "HTTP/1.1 101 Switching Protocols/r/n"; handshake_response.append("Upgrade: websocket/r/n"); handshake_response.append("Connection: Upgrade/r/n"); handshake_response.append("Sec-WebSocket-Accept: "+acceptkey+"/r/n"); handshake_response.append("/r/n");

Respuesta de Chrome
HTTP / 1.1 101 Protocolos de conmutación
Actualización: websocket
Conexión: actualización
Sec-WebSocket-Accept: 5T5MvxP1iz40vLpi3kQs / ifDaCo =

Solicitud de Chrome
OBTENGA ws: // localhost: 4897 / echo HTTP / 1.1
Anfitrión: localhost: 4897
Conexión: actualización
Pragma: no-caché
Cache-Control: no-caché
Actualización: websocket
Origen: http: // localhost
Sec-WebSocket-Version: 13
User-Agent: Mozilla / 5.0 (Windows NT 6.3; WOW64) AppleWebKit / 537.36 (KHTML, como Gecko) Chrome / 47.0.2526.106 Safari / 537.36
Aceptar-Codificación: gzip, desinflar, sdch
Accept-Language: en-US, en; q = 0.8
Sec-WebSocket-Key: LKF8lHGznbKGIgO1UzAOhg ==
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits

Dice "Error durante el protocolo de enlace WebSocket: valor incorrecto del encabezado ''Sec-WebSocket-Accept''".

Chrome también muestra un marco adicional recibido tamaño 79 bytes código de operación -1.

¡Montones de gracias!


Chrome dice que ''Sec-WebSocket-Accept'' es incorrecto. Al tratar de calcularlo manualmente, tengo que estar de acuerdo con Chrome.

Mi prueba:

  1. concat "LKF8lHGznbKGIgO1UzAOhg ==" y "258EAFA5-E914-47DA-95CA-C5AB0DC85B11" => "LKF8lHGznbKGIgO1UzAOhg == 258EAFA5-E914-47DA-95CA-C5AB0DC85B11", esa es la key .
  2. calcular SHA1 160 bits hex: bf15 14e3 7108 0ee4 7782 c709 a767 cc72 423d e5c4
  3. De su registro, su codificación a base64 es: 5T5MvxP1iz40vLpi3kQs / ifDaCo =
  4. Descifrándolo a hex: e53e 4cbf 13f5 8b3e 34bc ba62 de44 2cfe 27c3 682a

Los valores audaces deben ser iguales. No dude en corregirme si me equivoco en alguna parte.

Posibles problemas:

  • ¿ sha_str tiene sha_str nula? es decir, strlen((char*)sha_str) == 20 ?

  • sesión de charla firmada / no firmada?