Pages: [1]   Go Down
Author Topic: Esempio WebServer  (Read 686 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 1
Posts: 42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao a tutti, non riesco a capire come funziona l'esempio webserver presente nell'ide di arduino

Code:
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
« Last Edit: February 11, 2013, 12:19:09 pm by paolo86 » Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 115
Posts: 7265
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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. smiley-kitty
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Offline Offline
Newbie
*
Karma: 1
Posts: 42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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  smiley-wink ), è 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  smiley )

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  smiley-razz
Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 115
Posts: 7265
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

A si in effetti crea un po' di confusione.
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Pages: [1]   Go Up
Jump to: