ESP8266 проверка, отключен ли TCP-клиент...неформально
Привет, у меня есть библиотека ESP8266WiFi. Обычно я проверяю наличие соединения TCP-клиента с помощью client.connected().
Но, похоже, он все еще возвращает true, если мой TCP-клиент неожиданно отключается (например, отключается от WiFi/пропадает питание/...). Из-за чего моя программа застревает в бесконечном цикле.
Есть ли более надежный способ проверки состояния соединения?
@MoonFan, 👍0
1 ответ
Лучший ответ:
У вас есть неотъемлемая проблема, заключающаяся в том, что TCP-соединение завершается явным сообщением «FIN» от завершающей стороны, за которым следуют FIN-ACK и ACK.
Обратитесь к здесь.
Если ваш клиент (или сервер) просто выключается, не закрывая соединение должным образом, то все. Соединение зависает, и никакие данные не будут переданы, если это явно не обработано.
Если вам нужно знать, все еще ли клиент, вы должны использовать механизм heartbeat. То есть, после того, как прошел некоторый период времени без ответа, запросите сторону соединения с сообщением "heartbeat" и посмотрите, ответит ли она через заданное максимальное время. Обратный способ — заставить клиента отправлять периодическое сообщение "Keep Alive", которое удерживает соединение, пока оно отправляется повторно.
- Несколько клиентских серверов через Wi-Fi
- ESP8266 TCP-соединение WiFiClient проблема
- ESP8266 отправляет TCP HEX-пакет из 4 символов
- Пример класса ESP8266 ASyncTCP
- Веб-сервер ESP8266 недоступен через 2 минуты после сброса
- ESP8266 — Как получить многоадресный пакет UDP?
- Статический IP-адрес для esp8266 на основе шлюза
- Запрещенные символы в TCP/IP