Bonjour j'utilise un shield ethernet et je souhaite faire un grand nombre de page internet.
La partie faire la page et faire une redirection simple.
Maintenant je souhaite faire une redirection plus compressé qui récupère la requête "Get" et cherche le fichier sur la carte SD. Malheureusement pour une raison inconnue ma boucle while, qui sert a trouver la position de l'espace entre le nom du fichier et "HTTP/1.1" . Le problème de la boucle while et que je ne parviens pas en m'en sortir.
Pouvez-vous m'aider ?
Voici le code :
void gestionClient()
{
EthernetClient client = serveur.available(); //on ecoute le port
if (client) //si le client existe
{
reception = "";
if (client.connected())
{
Serial.println(F("Client connecte"));
if (client.available()) carLu = client.read();
while (client.available() && carLu != 10) //Tant qu'il reste au moins 1 octet à lire sur la première ligne
{
reception = reception + carLu;
carLu = client.read();
}
Serial.print(F("\n'reception' = "));
Serial.println(reception);
if (reception.startsWith("GET")) { //Si la chaine reçue contient une requète
if (reception.startsWith("GET / HTTP/1.1")) { //Requête sans paramètre => affichage de la page
accueil(client);
} else if (reception.startsWith("GET /page")) {
page();
} else if (reception.startsWith("GET /?0 ")) { //Requête sans paramètre => affichage de la page
int led = int(0);
Serial.println(led);
page();
} else if (reception.startsWith("GET /?1 ")) { //Requête sans paramètre => affichage de la page
int led = int(1);
Serial.println(led);
page();
} else if (reception.startsWith("GET /?2 ")) { //Requête sans paramètre => affichage de la page
int led = int(2);
Serial.println(led);
page();
} else if (reception.startsWith("GET /?3 ")) { //Requête sans paramètre => affichage de la page
int led = int(3);
Serial.println(led);
page();
} else if (reception.startsWith("GET /?4 ")) { //Requête sans paramètre => affichage de la page
int led = int(4);
Serial.println(led);
page();
} else if (reception.startsWith("GET /disonect ")) {
disconect(client);
} else if (reception.indexOf("test.txt") != -1) //Si demande d'envoi du fichier 'style.css'
{ //(balise <link> dans le fichier html)
if (d >= 1) {
Serial.print("Client autorisé : ");
Serial.println(d);
if (SD.exists("test.txt")) //Si le fichier "style.css" existe on l'ouvre en
{ //lecture, puis on lit son contenu caractère par
d--;
client.println("HTTP/1.1 200 OK"); //type de HTML
client.println("Content-Type: text/txt; charset=ascii"); //type de fichier et encodage de caracteres
client.println("Connection: close"); //fermeture de la connexion quand toute la reponse a ete envoyee
client.println();
File fichier = SD.open("test.txt", FILE_READ); //caractère que l'on envoie en même temps vers
while (fichier.available()) //le client pour affichage.
{
char carTemp = fichier.read();
Serial.write(carTemp);
client.write(carTemp);
}
fichier.close();
} else {
Serial.println(F("Fichier 'test.txt' absent"));
return;
}
}
else {
Serial.print("Client interdit : ");
Serial.println(d);
}
}else{
String reception2 = reception.substring(5);
byte x = 0;
byte e = " ";
reception.substring(4) = reception2;
Serial.print("reception2 = ");
Serial.println(reception2);
////////////////////////////Boucle While non foctionnel.////////////////////////////
while(reception2.charAt(x) != e){
Serial.println(x);
Serial.println(reception2.charAt(x));
delay(100);
x++;
}
Serial.println(x);
Serial.println(reception2.charAt(x));
String reception3 = reception2.substring(0,x);
Serial.print("reception3 = ");
Serial.println(reception3);
//if (SD.exists(reception)) {
}
}
else Serial.println(F("Requete non conforme"));
delay(1); //La transmission est rapide mais pas instantanée
client.stop();
}
}
}
Merci.