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, а получить уже на другой?