Webserver und client.parseInt();

Hallo Zusammen

Ich habe da mal eine frage zu Webserver

Serial.parseInt(); hat einen Timeout

Ist das bei client.parseInt(); + int val = client.parseInt();

genauso wenn ja wie kann Ich das aendern

#include <SPI.h>
#include <Ethernet.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192,168,0,20 };

const int MAX_PAGENAME_LEN = 8;
char buffer[MAX_PAGENAME_LEN+1];

EthernetServer server(80);

void setup()
{
pinMode(4, OUTPUT);
digitalWrite(4, HIGH);
pinMode(53, OUTPUT);
Serial.begin(9600);
Ethernet.begin(mac, ip);
server.begin();
delay(2000);
}

void loop()
{
EthernetClient client = server.available();
if (client)
{
int type = 0;
while (client.connected())
{
if (client.available())
{
memset(buffer,0, sizeof(buffer));
//if(client.find("/"))
if(client.readBytesUntil('/', buffer,sizeof(buffer)))
{
Serial.println(buffer);
if(strcmp(buffer,"POST ") == 0)
{
client.find("\n\r");
while(client.findUntil("PinD", "\n\r"))
{
int pin = client.parseInt();
int val = client.parseInt();
pinMode(pin, OUTPUT);
digitalWrite(pin, val);
Serial.println(pin);
Serial.println(val);
}
}
sendHeader(client,"Post example");
client.println("

Click buttons to turn pin 8 on or off

");
client.print(
"

<input type='hidden' name='PinD34'");
client.println(" value='0'>");
client.print(
"

<input type='hidden' name='PinD34'");
client.println(" value='1'>");
client.println("");
client.stop();
}
break;
}
}
delay(1);
client.stop();
}
}
void sendHeader(EthernetClient client, char *title)
{
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
client.print("");
client.print(title);
client.println("");
}

bye juergen

Das ganze print und Parse Zeug in Serial stammt eigentlich aus den Print und Stream Klassen. Davon sind einige andere Klassen abgeleitet und beherrschen daher die gleichen Methoden.

Das hier trifft also auch hier zu:

Oder allgemein:

Wenn du damit nicht hinkommst lies bis zu einem Delimiter in ein Array ein und mache die Wandlung mit atoi()

Hallo Zusammen

Hallo Serenifly

Kanste Mir noch einen Tip geben was muss anstatt von client.parseInt(); schreiben

client.read

und dann Zeichen fuer Zeichen Einlesen

wie bei Serial

bye juergen

Ich denke er meint es in etwa so.

static char html_reponse[MAX_RESPONSE_CHARS];
static unsigned int html_counter;

while (client.connected()) {
      if (client.available()) {
        char c = client.read();
            
      // Hier mit einer if Abfrage char c nach dem Delimiter schauen und dann die Schleife verlassen
      // Darauf achten das html_reponse am Ende ein '\0'  bekommt

          HTTP_req += c;
            html_reponse[html_counter]=c;
             html_counter++;
.....

Hallo Zusammen

Hallo rudirabbit

Ich Danke dir genau das habe Ich gesucht

Ich habe da noch mal eine Frage zu Webserver

Kann man ueber ein Input Zahlenwerte an den Webserver uebergeben

Bei juergen

Hallo Jürgen

Kann man ueber ein Input Zahlenwerte an den Webserver uebergeben

Ich habe ein älteres Homeserver Projekt mit dem Arduino am laufen.
Hier schalte ich unter anderem Relais im Webinterface ein oder aus.
Gerade mal die Codestelle rausgesucht. (via Get)

client.println("<td align='center' bgcolor='#222222'>
<form method=\"get\"><input type=submit name=1 value='Einschalten'></form></td>");
client.println("<td align='center' bgcolor='#222222'>
<form method=\"get\"><input type=submit name=1 value='Ausschalten'> </form></td>");

Das was in value steht bei mir z.b. 'Einschalten' könnte man auch z.b '213312344' schicken.
Ist ja auch nur ein String wie 'Einschalten'.
Den Response beim Webserver dann danach parsen, und wenn du damit weiterrechnen willst in ein int wandeln.