Ethernet Client-Problem

Hallo,

ich bin Achim und neu hier im Forum und hoffe auf Hilfe für mein Problem.

Uch möchte eine Netzwerksteckdose NETIO-230B mit einem Arduino Uno und einem Ethernet Shield steuern. Ich setze hierzu erfolgreich folgenden HTTP Request and die Steckdose ab um den Status abzufragen.

....

client.print("GET /cgi/control.cgi?login=p:admin:admin&port=list HTTP/1.1\r\nHost: 192.168.1.212 Connection: keep-alive\r\n\r\n");
....

dabei habe ich gelernt, dass der Request nur mit einem client.print(..) funktioniert. Bei mehreren print Anweisungen wird bei jedem print ein Paket abgeschickt und die Steckdose versteht das nicht.

Soweit so gut. Mein Ziel ist es jedoch die einzelnen Steckdosen Ein/Aus zu schalten. Hierzu muß ich mir jedoch den RequestString dynamisch zusammenbauen. Als Test habe ich hierzu den funkionierenden Request in eine Stringvariable gepackt und abgeschickt.

Also:

String request=""GET /cgi/control.cgi?login=p:ad.............."

und dann

client.print(request)

abgestzt. Leider werden dann wieder mehrere TCP Pakete verschickt und nicht der GANZE RequestString als ein einziger "HTTP Request" und das versteht die Steckdose nicht.

Kann mir jemand weiterhelfen?

Viele Grüsse
Achim

womisa:
char request[]=""GET /cgi/control.cgi?login=p:ad.............."

und dann

client.print(request)

Wieso kommen hier eigentlich gefühlt alle Programmieranfänger auf diese völlig untypischen String-Objekte beim Programmieren ihrer Arduino-Boards statt auf die Verwendung von C-typischen C-Strings?

Was passiert denn bei Verwendung eines C-Strings zum Senden:

  char request[]="GET /cgi/control.cgi?login=p:admin:admin&port=list HTTP/1.1\r\nHost: 192.168.1.212 Connection: keep-alive\r\n\r\n";
  Serial.print(request);

Werden da auch mehrere Pakete draus?

Hi,

also mit dem char Array scheint es zu gehen.

Vielen Dank
Achim

Ps: Ob ein String Object ein typisches Programmieranfängerproblem ist darüber gäbe es viel zu sagen. Ein Stringobject ist nun mal was anderes wie ein char Array. In diesen Sprachen kommt Niemand auf die Idee char Arrays zu verwenden. Ist das nicht eher so, dass diese Leute von C#,Java, Android.....kommen. Da schätzt man das String Object mit den dazugehörigen, komfortablen Stingfunktionen. In diesen Sprachen kommt Niemand auf die Idee char Arrays zu verwenden. Aber das sollte man nicht vertiefen....

Wieso kommen hier eigentlich gefühlt alle Programmieranfänger auf diese völlig untypischen String-Objekte beim Programmieren

In der großen Welt sind String Objekte ziemlich üblich geworden.
Man denkt in der Regel, ein Text sei auch nicht komplizierter als eine Zahl (bzw. man macht sich gar keine Gedanken darum).


Wieso denkt jeder, der ein Netzwerkkabel sieht, an "http://" und fragt sich nur GET oder POST ?
Zu C/C++ passt doch Socket Programmierung viel besser, oder ??? :wink:
Na gut, wenn schon Steckdosen erst als "Netzwerkfähig" gelten, wenn sie https: beherrschen

Wieso kommen hier eigentlich gefühlt alle Programmieranfänger auf diese völlig untypischen String-Objekte beim Programmieren ihrer Arduino-Boards statt auf die Verwendung von C-typischen C-Strings?

Warum ? - kann ich dir sagen - bin auch so einer, zwar nicht gerade Programmieranfänger aber ein Umsteiger von Delphi.

In Char Arrays Strings zu verarbeiten ist am Anfang einfach ungewöhnlich, man kommt erst später drauf das es auch dort auch alle Funktionen gibt die man braucht.
Es ist auch der null-terminator den man verwalten muss, das schreckt wohl ab.

Jedenfalls habe ich meinen "Parser" der den 433 mhz Empfang Datenstrom auseinanderdröselt mit "strtok" super lösen können.

Trotzdem habe ich meinem Projekt auch noch String Objekte, wenn ich meine das es dort einfacher ist diese zu benutzen.
In der aktuellen Arduino Version sind die String Objekte auch nicht mehr fehlerhaft.
Nimmt aber wohl mehr Ressourcen als ein char array String.