Go Down

Topic: Problème Ethernet Shield HTTP (Read 5563 times) previous topic - next topic

pl88

Pourtant je fais tout dans la même fonction, ma fonction de récupération HTTP actuelle est conçue selon le schéma suivant :

Code: [Select]

if (!client.connect()) return erreur;

client.println("GET /magepage?mesvariables HTTP/1.0");
client.println();

while (!client.available())
{
    delay(10);
    if (!client.connected() || test timeout)
    {
         client.stop();
         return erreur;
    }
}

while (client.connected())
{
    if (client.available()) client.read();
    else if (test timeout)
    {
        client.stop();
        return erreur;
    }
}

client.stop();
return ok;


Et oui pour l'instant le serveur est sur mon PC et l'arduino y accède depuis le réseau local.

pl88

Me revoici avec mes conclusions si ça peut aider quelqu'un...

J'ai repris la fonction pour faire l'attente de réponse et les lectures dans une seule boucle, comme suit :

Code: [Select]

while (client.connected())
{
    if (client.available())
    {
        //test si entetes déjà passées, si c'est le cas remplissage du tampon
    }

    if (timeout) erreur;
}

Apparemment cela règle le problème de dépassement lors de la réception.


Et il a fallu également pour résoudre le problème de GET anarchique remplacer :
Code: [Select]

client.println("GET ... HTTP/1.0");
client.println();

par :
Code: [Select]

client.print("GET ... HTTP/1.0\r\n\r\n");


Là en revanche je n'ai pas compris pourquoi puisque le println ne fait rien d'autre qu'ajouter "\r\n".


Voilà tout, merci et bonne soirée.

Go Up