Почему мы используем client.flush() в коде, когда мы подключаем Esp8266 к Интернету или серверу?

Я использую модуль Esp8266 Wifi (12-E) для управления светодиодом через доступ к Wi-Fi/веб-серверу. Я написал код в Arduino ide, взяв различные ссылки из Google. В коде я не понял client.flush(), почему мы используем этот метод? В гугле я искал много объяснений, мне часто приходилось объяснять, чего я пока не понимаю. "Ожидает завершения передачи исходящих последовательных данных" Я еще не успел. кто-нибудь может объяснить мне простыми словами?

/

// Подождать, пока клиент отправит данные

  Serial.println("new client");

  while(!client.available()){

    delay(1);

  }

  // Читаем первую строку запроса

  String request = client.readStringUntil('\r');

  Serial.println(request);

  client.flush();

, 👍1


1 ответ


Лучший ответ:

0

Скорее всего, это связано с старым использованием .flush() из версии IDE до 1.0.0.

В этих старых версиях .flush() стирала все ожидающие данные в буфере приема. Это было эквивалентно:

while (client.available()) {
    client.read();
}

Теперь это используется для проверки того, что все данные были отправлены, прежде чем делать что-либо еще. В данной ситуации это совершенно бессмысленно.

,

Я имею в виду, предположим, что если я клиент, запросите что-нибудь с сервера, и мой запрос будет прочитан в Arduino с помощью этой строки « Строковый запрос = client.readStringUntil('\r');" Затем последовательный монитор напечатает мое сообщение. потом клиент. flush сбрасывает мой текущий запрос перед переходом к новому запросу клиента. Это? пожалуйста, дайте мне простой пример, где я могу легко понять. если возможно, попробуйте объяснить мне из кода, который размещен выше., @Arijeet Roy

С версией IDE, выпущенной за последние несколько лет, client.flush() абсолютно ничего не сделает. В старой версии он отбрасывал все, что осталось в буфере., @Majenko

**В этих старых версиях .flush() стирала все ожидающие данные в буфере приема. Это было эквивалентно **, можете ли вы объяснить мне, что означает приемный буфер? это место, где будут храниться входящие данные?, @Arijeet Roy

Да. Здесь ваш «клиент» хранит данные, которые он получает *до* того, как вы их .read()., @Majenko

**С версией IDE, выпущенной за последние несколько лет, client.flush() абсолютно ничего не сделает. В старой версии он отбрасывал все, что оставалось в буфере.** Сэр, мне нужно спросить вас, что такое буфер?, @Arijeet Roy

**Да. Здесь ваш «клиент» хранит данные, которые он получает, прежде чем вы их .read().** Сэр, не могли бы вы вкратце объяснить мне приведенный выше код, который я разместил ранее?, @Arijeet Roy

Клиент никогда не знает, когда он получит данные. Только что приходят данные. При этом запускается прерывание (обычно). Это прерывание получает поступившие данные и сохраняет их во внутреннем блоке памяти, называемом «буфером». Затем ваш код использует .read() для получения данных из этого "буфера". Данные могут поступать и сохраняться в этом буфере в любое время, а не только тогда, когда вы используете .read(), чтобы получить их в своей программе. Если отправлено (и, следовательно, сохранено в буфере) больше данных, чем вы прочитали с помощью .read(), тогда данные останутся. .flush() используется для удаления..., @Majenko

... эти данные из буфера, а сейчас нет. Теперь, если вы хотите удалить все оставшиеся данные, вам придется сделать это вручную., @Majenko

Давайте [продолжим это обсуждение в чате](https://chat.stackexchange.com/rooms/113425/discussion-between-arijeet-roy-and-majenko)., @Arijeet Roy