Get запрос с обработкой ответа
- Войдите на сайт для отправки комментариев
Доброго времени суток.
Помогите пожалуйста, в основном с теорией.
Есть запрос от ардуино к серверу
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, а получить уже на другой?