Go Down

Topic: Esempio WebServer (Read 748 times) previous topic - next topic

paolo86

Feb 11, 2013, 06:14 pm Last Edit: Feb 11, 2013, 06:19 pm by paolo86 Reason: 1
Ciao a tutti, non riesco a capire come funziona l'esempio webserver presente nell'ide di arduino

Code: [Select]

void loop()
{
// listen for incoming clients
    EthernetClient client = server.available();
    if (client)
      {
        Serial.println("new client");
        boolean currentLineIsBlank = true;
          while (client.connected()) {
             if (client.available()) {
             char c = client.read();
             Serial.write(c);
            ........


all'inizio della funzione loop chiamo server.available() per vedere se c'è qualcuno connesso, se presente ne salvo l'istanza nella variabile client.
quello che non capisco è come sia possibile mediante la chiamata client.read() leggere la richiesta inviata dal mio browser ovvero:

GET / HTTP/1.1
Host: 192.168.200.177
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8,it;q=0.6
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

essendo stata inviata dal browser stesso.
In altri esempi usavo client.read() per leggere le risposte inviatemi dal server ad esempio l'home page di un sito.

La documentazione riporta per la funzione Server.available() la seguente spiegazione:
Gets a client that is connected to the server and has data available for reading

in teoria non dovrebbe esserci nulla da leggere dato che non gli ho ancora inviato niente....e anche se ci fosse qualcosa non capisco come possa leggere la richiesta http

Grazie mille

PaoloP

Nel codice postato tu leggi e invii via seriale i dati in arrivo dal client connesso.
Arduino in questo caso è il Server e il Browser è il client.
Quello stampato è la richiesta di dati da parte del Browser verso Arduino che si identifica raccontandogli un po' tutto di lui.
A questo poi dovrà seguire la risposta di Arduino che gli invierà la pagina eventualmente richiesta.
Il Browser è una persona molto seria: ogni volta che vuol farti una domanda ti presenta prima il suo passaporto. ^_^

paolo86

Ok fin qua tutto a posto. Però da seriale non viene inviato nulla, tutti i messaggi vengono scambiati tramite rete. in seriale mi limito a trascrivere quella che è la richiesta del client (browser).
Quello che non mi torna (o semplicemente non mi piace  ;) ), è l'utilizzo della EthernetClient per leggere le info mandate al server, ho capito il funzionamento del tutto, ma scritto così sembra quasi che il client riceva in ingresso la sua stessa richiesta. (inizia a farsi complicata con tutti questi client e server di mezzo  :) )

Per ora sono arrivato a questa conclusione: una volta avvenuta la richiesta da parte del browser arduino tratta la richiesta con un oggetto di tipo EthernetClient...se avessero aggiunto il metodo server.read() sarebbe stato un po' più chiaro  :P

PaoloP

A si in effetti crea un po' di confusione.

Go Up