Websocket версии 8 Sec-WebSocket-Accept несоответствие - PullRequest
2 голосов
/ 02 декабря 2011

Я написал сервер веб-сокетов на c ++, который отлично работает с протоколом веб-сокетов 00 (сервер с ключом 1, ключом 2 в заголовке рукопожатия).

Теперь с новым обновлением я пытаюсь сделать то же самое для новогоспособ рукопожатия работать.Вот мой ответ сервера на запрос рукопожатия:

"HTTP / 1.1 101 Протоколы переключенияr \ n \ r \ n ";

, в котором ключ сервера рассчитывается правильно.Например:

запрос подтверждения связи:
GET / test HTTP / 1.1
Обновление: websocket
Соединение: Обновление
Хост: 192.168.123.102:8585
Sec-WebSocket-Origin: http://192.168.123.5
Sec-WebSocket-Key: YB0mPvJ5t8ggCeGUWY39uQ ==
Sec-WebSocket-Version: 8

заголовок ответа рукопожатия:
HTTP / 1.1 101 Протоколы коммутации
Обновление: веб-сокет
Соединение: Обновление
Sec-WebSocket-Accept: xt9iyCNryQTseELUkHPWjzxA2ts =

Я также проверяю свой алгоритм с приведенным здесь примером http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-08, и он выдает точно такой же ответ.

Однако я все еще получаю следующую ошибку:
"Ошибка при рукопожатии WebSocket: Sec-WebSocket-Accept mismatch"

Я использую Chrome 15 в качестве браузера.

Есть ли у вас какая-нибудь идея, что идет не так?

(также в Chrome Инспектор Сеть, он не показывает ответ, который имеет место, когда он не принимает рукопожатие (даже со старшимверсии))

Ответы [ 2 ]

2 голосов
/ 16 января 2012

Существует другой протокол кадрирования, когда клиент отправляет данные.Раньше это было довольно просто.Теперь все намного сложнее.Пожалуйста, обратитесь к спецификации websockets rfc6455

http://tools.ietf.org/html/rfc6455#section-5.2

2 голосов
/ 06 декабря 2011

Я действительно выяснил, в чем была основная проблема.

ключ, который я использовал для кодирования base64, был

YB0mPvJ5t8ggCeGUWY39uQ==
258EAFA5-E914-47DA-95CA-C5AB0DC85B11

вместо

YB0mPvJ5t8ggCeGUWY39uQ==258EAFA5-E914-47DA-95CA-C5AB0DC85B11

лишняя \ n была целой проблемой.

ОДНАКО , Теперь, когда я получаю сообщение Подключено (клиент успешно подключен к серверу), я не могу ничего отправлять или получать. Проблема в на стороне сервера .

Знаете ли вы, какие изменения происходят на стороне сервера по сравнению с более старым протоколом websocket? Я только изменяю свой ответ на рукопожатие, и этого недостаточно.

...