Истек тайм-аут рукопожатия при открытии Websocket javascript

#javascript #websocket

#javascript #websocket

Вопрос:

Я использую websocket для подключения к монитору в локальной сети. Я использую следующий код для подключения к IP 192.168.0.1 -адресу на порту 5000 :

 const socket = new WebSocket("ws://192.168.0.1:5000", ['soap', 'xmpp']);
 

Это изображение пакетов, отправленных и полученных от 192.168.0.1

подключение wireshark

В первых двух у нас есть отправленный запрос и ACK запрос для этого запроса, но WebSocket не удается прочитать ACK и, таким образом, приводит к a timeout error через 4 минуты (как показано в последних трех строках).

 WebSocket connection to 'ws://192.168.0.1:5000/' failed: WebSocket opening handshake timed out
 

Я пробовал приложение HW-group, и оно работало нормально. Вот изображение пакетов, отправленных и полученных из приложения:

введите описание изображения здесь

(Первые три строки предназначены для отключения, а последние три — для подключения)

Я понятия не имею, почему WebSocket это приводит к ошибке тайм-аута, а сокет из другого приложения подключается нормально. Если у кого-нибудь есть какие-либо замечания по этой ситуации, пожалуйста, дайте мне знать.

Комментарии:

1. Вы пробовали let socket = new WebSocket(...) ? Не уверен, является ли const это проблемой здесь…

2. Я попытался изменить его на let socket... , но все тот же. насколько я могу судить, он отправляет и получает пакет рукопожатия, но не регистрирует, что он получает ACK ответ.

3. Вы пробовали без спецификации протокола: new WebSocket("ws://192.168.0.1:5000"); ? Есть разница? Вы также можете протестировать свой клиент на https://socketsbay.com/test-websockets

4. да, даже без спецификации протокола я сталкиваюсь с той же проблемой. Я также протестировал клиент, используя предоставленную вами ссылку, и соединение было успешным.

5. Ha! Это не протокол websocket, а обычный проприетарный последовательный протокол. Используйте py-serial библиотеку ( pyserial.readthedocs.io/en/latest/shortintro.html ) и попытайтесь отправить требуемые байты, как определено в спецификации. Соединение с websocket инициируется http-запросом, а затем понижается до соединения с сокетом — совершенно другое!