Hallo zusammen. Nachdem ich es nun geschafft habe, den Webserver von Ulrich Radig (für die, die es nicht kennen: https://www.ulrichradig.de/home/index.php/avr/eth_m32_ex) erfolgreich in meine Hardware zu implementieren, und diesen erfolgreich über den Browser ansprechen kann, beschäftige ich mich nun mit dem Implementieren einer Schnittstelle, die eine Kommunikation zwischen dem Webserver und einer Smartphone-App herstellen kann. Hierbei geht es mir vor allem darum, Arrays zu übertragen, die verschiedene Sensordaten erhalten. Einerseits soll somit das Smartphone ein Array vom Server mit Daten bekommen, andererseits soll das Smartphone allerdings auch ein Array an den Server senden können. Als Protokoll würde ich gerne http über TCP verwenden. Aktuell ist in der Software bereits implementiert, dass wenn man den Server über einen Browser anspricht, so öffnet sich eine auf dem Server gespeicherte Website, die unter anderem den Inhalt des Arrays graphisch darstellt. Nun möchte ich jedoch, dass lediglich dieses Array, also ohne jegliche Website, an das Smartphone gesendet wird. Das Smartphone sendet somit ein TCP-Paket an den Server, dieser soll nun das Array mit in das TCP-Paket packen. Nun die Frage: Auf der einen Seite, welche Anforderungen muss ein TCP-Paket vom Client erfüllen, damit der Server beispielsweise ein Array in die TCP-Antwort packt, und auf der anderen Seite, welche Anforderungen muss der Server erfüllen, um Arrays vom Client zu empfangen? Einen schönen Abend noch, wünscht Netzwerkneuling
Netzwerkneuling schrieb: > Nachdem ich es nun geschafft habe, den Webserver von Ulrich Radig > (für die, die es nicht kennen: > https://www.ulrichradig.de/home/index.php/avr/eth_m32_ex) > erfolgreich in meine Hardware zu implementieren, und diesen erfolgreich > über den Browser ansprechen kann, beschäftige ich mich nun mit dem > Implementieren einer Schnittstelle, die eine Kommunikation zwischen dem > Webserver und einer Smartphone-App herstellen kann. Hierbei geht es mir > vor allem darum, Arrays zu übertragen, die verschiedene Sensordaten > erhalten. Einerseits soll somit das Smartphone ein Array vom Server mit > Daten bekommen, andererseits soll das Smartphone allerdings auch ein > Array an den Server senden können. Ok. > Als Protokoll würde ich gerne http über TCP verwenden. Aktuell ist in > der Software bereits implementiert, dass wenn man den Server über einen > Browser anspricht, so öffnet sich eine auf dem Server gespeicherte > Website, die unter anderem den Inhalt des Arrays graphisch darstellt. > > Nun möchte ich jedoch, dass lediglich dieses Array, also ohne jegliche > Website, an das Smartphone gesendet wird. Das Smartphone sendet somit > ein TCP-Paket an den Server, dieser soll nun das Array mit in das > TCP-Paket packen. > > Nun die Frage: Auf der einen Seite, welche Anforderungen muss ein > TCP-Paket vom Client erfüllen, damit der Server beispielsweise ein Array > in die TCP-Antwort packt, und auf der anderen Seite, welche > Anforderungen muss der Server erfüllen, um Arrays vom Client zu > empfangen? Deine Aufgabe ist im Grunde einfach zu bewältigen, und dann doch wieder schwierig -- weil es so viele Möglichkeiten gibt. Zunächst gibt es verschiedene Typen von HTTP-Requests, die wichtigsten sind wohl "GET" und "POST". Ein "GET"-Request sieht etwa so aus:
1 | GET /location?a=1&b=2&c=drei HTTP/1.0 |
und ein "POST"-Request etwa so:
1 | POST /location HTTP/1.0 |
2 | |
3 | a=1&b=2&c=drei |
(Das ist jetzt die einfache Variante für HTTP/1.0; für HTTP/1.1 muß zusätzlich der "Host:"-Header gesetzt werden.) Beide Requests übertragen dieselben Daten: {"a": 1, "b": 2, "c": "drei"}; mit diesen Request-Typen werden klassische HTML-Formulardaten übertragen. Eine klassische Response würde dann etwa so aussehen:
1 | HTTP 200 Ok |
2 | |
3 | dings=bums&klaus=dieter&karl=5 |
Eine neuere Variante arbeitet mit JSON; damit würde der POST-Request etwa so aussehen:
1 | POST /location HTTP/1.0 |
2 | |
3 | {"a":1,"b":2,"c":"drei"} |
Eine Response sähe dann etwa so aus:
1 | HTTP 200 Ok |
2 | |
3 | {"dings":"bums","klaus":"dieter","karl":5} |
Selbstverständlich können ein Webserver und ein -Client, die unter Deiner Kontrolle stehen, die Daten übergeben, wie sie wollen. Du mußt es Dir nur aussuchen und das dann implementieren. Viel Erfolg!
Hi, vielen Dank für die Antwort. Letztlich habe ich mich dann für die POST-Request entschieden:) Das heißt aber alle Attribute, die der Klient überträgt und auch jemals übertragen wird, müssen sowohl im Klient als auch in dem Server in der Software als Variablen deklariert werden, wobei im Server dann auch noch genau definiert werden muss, wie die Attribute, die vom Client gesendet werden, von dem Server verarbeitet werden sollen, hab ich das richtig verstanden?
Beachte die Puffergröße. Was passiert, wenn der ganze HTTP Request mitsamt Daten nicht mehr in ein IP Paket rein passt? Kommt der Mini-Webserver damit zurecht?
Zur Not könnte man es ja auch so machen, dass man in jedes HTTP-Request nur ein Attribut mitsendet, und dann kurze Zeit später das nächste, oder? Also falls es wirklich zu einem Buffer-overload käme.
der lwip kann das ... man muss das nur zusammensetzen. Das ist das problem bei multipart POST requests einige browser senden header + daten zusammen POST / ..... \r\n\r\n{json daten} andere senden erst header und im nächsten paket die eigentlichen daten paket 1: POST / ..... \r\n\r\n paket 2: {json daten} das variiert je nach OS und browser.. ob der radigserver das kann weiß ich nicht.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.