Я создаю сервер веб-сокетов (огромная головная боль для меня), и его оказалось намного сложнее, чем я ожидал.Chrome Websocket Handshake
В настоящее время у меня возникла проблема с получением хром, чтобы принять рукопожатие. По какой-то причине он отлично работает в Firefox, но в chrome - соединение сразу закрывается.
Клиент Рукопожатие
GET /chat HTTP/1.1
GET /chat HTTP/1.1
Host: localhost:8181
Host: localhost:8181
Connection: Upgrade
Connection: Upgrade
Pragma: no-cache
Pragma: no-cache
Cache-Control: no-cache
Cache-Control: no-cache
Upgrade: websocket
Upgrade: websocket
Origin: http://localhost:8080
Origin: http://localhost:8080
Sec-WebSocket-Version: 13
Sec-WebSocket-Version: 13
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.99 Safari/537.36
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.99 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8
Accept-Language: en-US,en;q=0.8
Sec-WebSocket-Key: ANzq7Z0GL4lfvw518WOnig==
Sec-WebSocket-Key: ANzq7Z0GL4lfvw518WOnig==
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
и мой ответ выглядит следующим образом:
String response = "HTTP/1.1 101 Switching Protocols" + Environment.NewLine +
"Upgrade: websocket" + Environment.NewLine +
"Connection: Upgrade" + Environment.NewLine +
"Sec-WebSocket-Accept: " + wsAccept + Environment.NewLine +
"Sec-WebSocket-Protocol: " + protocol + Environment.NewLine +
Environment.NewLine;
где wsAccept = Convert.ToBase64String(sha1.ComputeHash(Encoding.UTF8.GetBytes(key + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11")))
и protocol = "chat";
Есть ли сайт или что-то я могу использовать в качестве ссылка? Я чувствую, что я рисую здесь пробел.
Любая помощь очень ценится.
Благодаря
решаемые
Я finlly получил, как это сделать. Я отправлял по многим параметрам обратно, последние
"Sec-WebSocket-Protocol: " + protocol
был излишним! Итак, рукопожатие должно выглядеть так:
String response = "HTTP/1.1 101 Switching Protocols" + Environment.NewLine +
"Upgrade: websocket" + Environment.NewLine +
"Connection: Upgrade" + Environment.NewLine +
"Sec-WebSocket-Accept: " + wsAccept + Environment.NewLine +
Environment.NewLine;
Надеюсь, это поможет любому, кто сталкивается с подобной проблемой!
Спасибо за ваш ответ, однако, я не дал вам ваш правильный ответ. Я обновил ответ с реальным ответом. – Paul
Вы уверены, что проблема в рукопожатии? Вы видите какую-либо ошибку на консоли Google Chrome? – vtortola
Я пробовал читать чистые внутренние элементы, но все, что я нахожу под сокетами, это UDP-Sockets - Что я должен искать? Я все еще верю, что что-то пошло не так, как рукопожатие, так как он сразу же не работает, когда сокет «открывается». Это довольно странно работает в Firefox. – Paul