wie lese ich diese version beim nodemcu aus?
in dieser Form springt es wieder sofort aus der Website raus, wie ganz am Anfang.
- - - Aktualisiert - - -
mit
baut er wieder auf, bleibt aber auch wieder komplett im Formular hängen (wie zuvor)Code:while(client.connected()) { delay(10); } client.stop();
wie lese ich diese version beim nodemcu aus?
habe 2.2.0, update wird geladen
jetzt 2.5.2
beim nächsten Programmupload auf das Board dann hoffentlich 2.5.2
Ich bin mir zwar nicht sicher was du genau bezwecken willst, aber ich würde erstmal versuchen zu verstehen was ich für ein Verhalten erwarte, mich darüber schlau machen wie Browser sich in der gegebenen Situation verhalten und wie ich meinen Code bauen muss damit es auch mit jedem Browser überall funktioniert.
Webseiten darstellen ist kein Problem, man akzeptiert einen Client, ließt die Anfrage per client.read() aus, sucht die passende Webseite für die aufgerufene Adresse und gibt den HTML code zurück, flush, stop und fertig ist der Lack, das sollte auch einfach so ohne irgendwelche Probleme funktionieren.
Webaufrufe mit Daten vom Browser zum Server geht per GET oder POST, wobei man die GET Daten auch sofort übermitteln kann, sofern man weis was man eingeben muss.
Per POST braucht es erst ein Formular, welches man vorher auch zum Client senden muss, dafür braucht es also 2 Anfragen, die erste Anfrage welche die Webseite mit dem Formular an den client sendet und die 2te Anfrage als Action mit POST und dem ausgefüllten Formular.
Was du also schreiben musst ist eine Schleife, welche (sofern die Verbindung zum Browser offen hält mit wie Moppi schon beschrieben hatte, was allerdings auch nicht garantiert ist) immer client.read() benutzt um Anfragen zu empfangen, auszuwerten und zu verarbeiten und zu beantworten.
Zu jeder Anfrage muss es auch eine Webseite als Antwort geben, sonst beschwert sich dein Browser wie in deinem Fall dass der Server die Verbindung geschlossen hat!
Was du brauchst ist ein strukturierterer Ansatz für deine Aufgabe. Außerdem solltest du dich mit einfachen Session-Cookies beschäftigen, sonst bekomst du spätestens dann Probleme wenn du längere Zeit auf der Webseite bist, weil dein Browser irgendwann den Socket von sich aus schließt und du einen neuen "client" bekommst den du dann wieder neu authentifizieren musst. (oder du speicherst dir die IP des client als trick, aber das ist bei leibe nicht sicher und nur als workaround gemeint!!!!!!!)
--------------
Am besten schreibst du erstmal einen dummen Server, welcher Browseranfragen annimmt und an den Browser zurück spiegelt um erstmale in Gefühl für die Anfragen zu bekommen.
Wenn das klappt, braust du dir eine einfache Webseite zusammen, welche bei der richtigen Adresse auch ausgegeben wird.
Dann baust du in einer der Seiten einen Knopf für eine GET und einen Knopf + Formular für eine POST Anfrage ein.
Auf jeder Seite lässt du Platz um den Inhalt der Anfrage zu posten und auf Anfragen die du nicht lesen kannst Antwortest du dem Browser wie beim ersten Schritt mit der Anfrage als Antwort um zu verstehen was genau der Browser da gesendet hat.
So hangelst du dich dann bei deinem Adress-Parser langsam vorwärst und musst nicht in einem einzelnen Codeblock rumstricken
Geändert von Ceos (21.10.2019 um 15:28 Uhr)
Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
nicht.
naja, es funktioniert doch im Prinzip, bis auf einen "Schönheitsfehler", username wird korrekt geprüft und pwd auch - zumindest in der Version Seite 2 oben
https://www.roboternetz.de/community...l=1#post655516 ,
und auch wenn man hier noch 2x hintereinander ENTER drücken muss.
Diesen Schönheitsfehler gilt es nun zufinden und ebenfalls auszumerzen - unter core 2.4.0 hat es ja auch noch 100%ig funktioniert.
Sehr schön wäre es auch, wenn man GET durch POST ersetzen könnte.
Cookies will ich keine setzen.
Deine sehr allgemeinen Tipps kann ich allerdings nicht umsetzen, mein Ursprungscode war bereits so leistungsfähig wie ich es überhaupt verstehen und schreiben konnte - für einen ganz neu geschriebenen Code wäre ich ntl auch sehr dankbar .
Ich habe oben mal eine Empfehlung ergänzt wie du dich an deine konkrete Problematik heranarbeiten kannst.
Ich wollte eigentlich nur so höflich wie möglich darauf hinweisen dass man mit dem Code wie er ist nicht unbedingt weiterarbeiten sollte und nochmal sauber neu anfangen sollte weil amn sonst mit Phänomenen und Seiteneffekten arbeitet die nicht im geringsten Hilfreich für das Verständnis sind.
Ich schlage vor du schreibst einfach nochmal ein neues Beispiel welches nichts weiter macht als Anfragen entgegen zu nehmen und diese als HTML oder Text an den Browser zurück spiegelt.
Mit dem String den du da spiegelst kannst du dann einen Parser bauen um die Anfrage auszuwerten und entsprechend Webseiten auszugeben.
Wenn das klappt, kannst du dir dann eine POST und GET Anfrage in einer deiner Webseiten einbauen und spiegeln lassen um deinen Parser zu erweitern
edit: ich versuche hier nur mal einen kleinen Objektorientierten Ansatz für das Verständnis
Ich bin der Server und du der Browser, du kannst mich entweder mit der Zimmernummer und dem Geheimen Passwort ansprechen (GET mit Daten in der Aufrufzeile ... unsicher weil Klartext) und ich lasse dich rein
oder du musst erstmal mich fragen ob ich dir das Klemmbrett(Webseite) mit dem Login Formular gebe (GET) damit du es mir ausgefüllt zurück geben kannst (POST)
In jedem Fall muss ich wissen wer du bist und solange ich dich sehe (offener Socket) weis ich auch dass die Formulardaten oder Anfragen von dir sind. Wenn du allerdings nur einmal außer Sichtweite gehst muss ich annehmen dass du nicht mehr du bist oder du dich mir gegenüber ausweist.
Geändert von Ceos (21.10.2019 um 15:47 Uhr)
Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
nicht.
ich selber kann es nicht besser und ich würde es momentan auch nicht anders machen, so wie ich das Prinzip verstehe
- vlt hat Moppi ja mit seiner Version noch etwas mehr Erfolg, denn die letzte hängt ja auch wieder.
Wir hatten das Thema ja schon öfter - ich brauche keine allgemeinen Ratschläge, was ich brauche, sondern Code, der kompilierbar ist und den ich testen kann.
Konkrete Codevorschläge also immer gerne!
Das Problem ist, dass du noch nicht mal die Grundlage zu verstehen scheinst wenn man den Code ansieht. (nicht bös gemeint) Du verarbeitest nicht mal die Anfrage sondern wartest einfach auf "irgendeine" Anfrage und spuckst die Webseite aus.
Wenn du jemals authorized auf true setzt sollte der Browser theoretisch nie wieder antworten weil der client schon nach dem verbinden sofort mit einem return abgewürgt wird.
Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
nicht.
wie gesagt, es funktioniert alles bis core 2.4.0, erst danch nicht mehr.
Sogar jetzt aber geht das Einloggen und Ausloggen (aus der Haupt-html-Seite) einwandfrei, denn dadurch wird authorized wieder auf false gesetzt.
Je nachdem,, wie authorized gesetzt ist, wird im Hauptprogramm (loop() ) entweder die Login Seite aufgerufen oder die Haupt-Website.
Wirklich hilfreich ist jetzt tatsächlich nur funktionierender Code für core 2.5.2
Lesezeichen