Get запрос с обработкой ответа

Нет ответов
gonzales
Offline
Зарегистрирован: 13.07.2015

Доброго времени суток.

Помогите пожалуйста, в основном с теорией.

Есть запрос от ардуино к серверу

bool SendMotionCheck(String ip, int port, String url) {
  EthernetClient client;
  bool result = false;
  if (client.connect(ip.c_str(), port)) {
    Watchdog.reset();
    DebugPrintln("connected");
    DebugPrintln(url);
    client.print("GET ");
    client.print(url);
    client.println(" HTTP/1.1");
    client.print("Host: ");
    client.println(ip);
    client.println("Connection: close");
    client.println();
    client.flush();
  }

    client.stop();
}

Он работает исправно, но проблема в том, что для его обработки приходится внутри функции делать задержку. Примерно вот так

bool SendMotionCheck(String ip, int port, String url) {
  EthernetClient client;
  bool result = false;
  //String pushstring = "loginuse=admin&loginpas=888888&PageIndex=0&PageSize=1000";
  if (client.connect(ip.c_str(), port)) {
    Watchdog.reset();
    DebugPrintln("connected");
    DebugPrintln(url);
    client.print("GET ");
    client.print(url);
    client.println(" HTTP/1.1");
    client.print("Host: ");
    client.println(ip);
    client.println("Connection: close");
    client.println();
    client.flush();
  }

//    client.stop();

    delay(1000);  <-----ВОТ ТУТ ЗАДЕРЖКА, ЧТОБЫ ПОЛУЧИТЬ ВЕСЬ ОТВЕТ
    if (client.available()) {
      DebugPrintln("data");
      while (client.available()) {
        int t = client.read(filebuffer, MAX_BUFFER_SIZE);


        DebugPrintln(t);
        Watchdog.reset();
        if (t > 300) {
          result = true;
        }
      }
    }
  }
  else {
    DebugPrintln("connected");
  }
  client.stop();
  return result;
}

И чтобы получить весь ответ, приходится эту задержку увеличить до 1000мс, а это слишком много.

Для того, чтобы избежать этого я хочу обрабатывать ответ в loop. То есть функция посылает запрос, а данные я уже обработаю в цикле, когда они придут.

Соответственно в цикле крутится функция

void CheckEthernet() {
  SWITCH_TO_W5100;
  EthernetClient client = server.available();
  if (client) {
    DebugPrintln("-------");
    DebugPrintln("client");
    if (client.available()) {
      //EXPERIMENT
      SendToTouchEthernet(true);
      t = client.read(filebuffer, MAX_BUFFER_SIZE);
}
}
}

Но ничего не приходит. Хотя функция сама работает, когда я посылаю запрос на ардуинку, она отрабатывает.

Вопрос к гуру, что я не правильно делаю, так нельзя делать, послать запрос с одного client, а получить уже на другой?