Я разрабатываю клиент WebSocket для настольного приложения Windows, я использую WebSocket-Sharp nuget для подключения к серверу.
Моя проблема в том, что когда соединение какое-то время бездействует, мой клиент не будет отправлять какие-либо ответы pong на запросы сервера ping, проверив Fiddler (снимок экрана ниже), вы увидите, что запрос ping третьего сервера всегда будет зависать, и ответ не будет отправлен.
Я пытаюсь отправлять запросы ping от моего клиента к серверу каждые 10 секунд (вместо того, чтобы ждать, чтобы сервер отправил ping каждые 20 секунд), проверив Fiddler, я вижу, что мой клиент отправляет запросы ping на сервер и ответ сервера правильно, но на самом деле после при небольшом периоде простоя (около 30 секунд) мой клиент ping запрашивает результат False (что означает, что они потерпели неудачу).
Обновление 1: Я забыл упомянуть, что когда я тестирую сервер с помощью расширения Chrome "Simple Web Socket Client", он работает нормально, без проблем.
Мои вопросы:
Спасибо за ответ, я проверю ваши рекомендации и сообщу вам результат, но я забыл упомянуть в вопросе, что когда я пытаюсь подключиться к тому же серверу с помощью расширения браузера Chrome "Simple Web Socket client", он работает нормально.
Я выполняю упомянутые вами шаги и обнаружил следующее. 1) состояние подключения - ПРОСЛУШИВАНИЕ. 2) проверив журналы Fiddler, я обнаружил следующие 2 ошибки - 12: 37: 27: 2535 [WebSocket # 1904] Чтение с сервера вернуло ошибку: 0 - 12: 37: 27: 2535 [WebSocket # 1904] Не удалось прочитать из клиента. .. В экземпляре объекта не задана ссылка на объект.
Похоже, сервер слушает, но соединение с клиентом не удалось. Веб-соединение использует TCP в качестве транспортного уровня, поэтому каждое веб-соединение также имеет TCP. TCP имеет максимальный размер 1500 байт, поэтому для каждого HTTP-сообщения вы увидите несколько TCP-сообщений. К серверу может подключаться несколько клиентов, поэтому я не могу сказать, действительно ли клиент подключен. Я бы прослушал соединение Chrome и посмотрел, какие заголовки используются. Я подозреваю, что вам нужно добавить заголовки Chrome в свой HTTP-запрос.
Большое спасибо за ваши ответы, которые помогли устранить проблему. похоже, что я использовал клонированную версию от WebSocket-Sharp, я заменил dll с официального сайта github, и все проблемы были решены. Это моя ошибка, мне пришлось быть более сосредоточенным.





Попробуйте две вещи: 1) используйте cmd.exe> Netstat -a, который покажет статус подключения, чтобы узнать, закрыто ли соединение 2) Проверьте Fiddler на FIN, который указывает, что соединение закрыто. Сервер может закрывать соединение в режиме ожидания, поэтому вам может потребоваться включить Keep-Alive, когда клиент подключается.