2016-04-04 4 views
0

Мой проект использует протокол WebSocket для связи. Серверная сторона реализована в C, а для клиентской стороны я использую Qt 4.8.1 для создания простого браузера для запуска кода HTML и JavaScript.Websocket клиент посылает [FIN, ACK] сразу после установления связи

У меня есть одна проблема с каркасом Qt. После установления связи клиентский размер немедленно отправляет [FIN, ACK] на сервер, чтобы сообщить о закрытии сессии как in this picture.

Я не знаю причину этой проблемы. Я думаю, что это ошибка в структуре Qt, потому что, когда я запускаю клиент в браузере Firefox, этого не происходит. У кого-нибудь есть идея, почему это происходит?

+0

Ваш вопрос не по теме, пока вы не добавите минимальный тестовый пример. Также возможно, что ваша сторона сервера тонко сломана и на самом деле не полностью реализует спецификацию websocket. Обратите внимание, что 'QWebSocket' поддерживает только протокол 13. Если ваш сервер этого не делает, он закроет соединение, как вы видите. –

ответ

0

версия Firefox использует стандарты протокола WebSocket RFC6455 (протокол версии 13), QT 4.8.1 использует стандарты протокола WebSocket hybi-00 (без версии протокола) https://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-00

Может быть, ваш сервер реализован правильно RFC6455 стандарты протоколов но неправильно с стандартами протокола hybi-00. Пожалуйста, отлаживайте, зарегистрировав свой контент запроса и ответа (/ key3/и данные запроса). Если данные запроса, которые генерируются вашим сервером, не соответствуют таковой в клиенте (QT), клиент немедленно отправит [FIN, ACK], чтобы закрыть сокет.

+0

Спасибо, брат! Теперь он работает хорошо! –

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