Besoin d'explication sur client.read

Bonjour,

Quand on s'amuse avec l'ethernet shield, avec lexemple suivant on peut lire les infos retournés par google sur arduino :

void setup()
{
Ethernet.begin(mac, ip);
Serial.begin(9600);

delay(1000);

Serial.println("connecting...");

if (client.connect()) {
Serial.println("connected");
client.println("GET /search?q=arduino HTTP/1.0");
client.println();
} else {
Serial.println("connection failed");
}
}

void loop()
{
if (client.available()) {
char c = client.read();
Serial.print(c);
}

if (!client.connected()) {
Serial.println();
Serial.println("disconnecting.");
client.stop();
for(;:wink:
;
}
}

Je ne comprends pas :

if (client.available()) {
char c = client.read();
Serial.print(c);
}

Parce que 'c' est un caractere, on est ok ?

donc on lit 'c' et on limprime

je ne comprends pas comment, sans boucle, on peut lire tout ce qui vient du serveur

on aurait du boucle du style

while (il y a des donnees a lire)
{
char c = client.read();
Serial.print(c);
}

je comprendrais mais là je ne comprends pas comment cette fonction arrive a afficher des phrases et des phrases...

Merci pour vos lumières !

En fait la fonction loop est une boucle infinie cachée.
L'explication se trouve là :loop() - Arduino Reference

Ah ba oui, ok, merci !

Et je me demande si ça devrait pas être

while (client.available() > 0) {

}

si client.available() donne un nombre d'octets encore pas lus et pas un booléen. (dépends de la librairie, c'est le cas avec le port série en tout cas)