Guten Tag,
Mein Problem ist ich kann daten zum Webserver senden das geht und er
schickt mir die Daten wieder zurückt wird die Webseite nicht richtig
angezeigt.
Vielleicht könnte mir einer weiterhelfen.
mfg
Ich habe uIP noch nie verwendet, aber anscheinend wird kein content type
Header mitgesendet, und die generierte Ausgabe muss innerhalb des body
Tags stehen. Ausserdem fehlt der doctype.
Ändere mal settings.shtml folgendermassen:
Daniel A. schrieb:> Könntest du die Ausgabe des Servers für die beiden Requests hier> hochladen?>> So könnte man den ersten in eine Datei speichern:curl -D /dev/stdout> http://192.168.1.156/settings.shtml > request1.txt
Das bezieht sich auf Linux oder?
Ich hab nur win7
andre schrieb:> Das bezieht sich auf Linux oder?> Ich hab nur win7
Oh, in dem fall könnte man es mit der windows version von wget und der
windows console versuchen:
ok damit kann ich wenig anfangen da ich in der Materie nicht so
bewandert bin.
Muss ich denn wenn das erste PSOCK_SEND_STR aufgerufen wird zuerst
Docktype html senden ??
andre schrieb:> Muss ich denn wenn das erste PSOCK_SEND_STR aufgerufen wird zuerst> Docktype html senden ??
Nicht unbedingt, es gibt viele Doctypes, das ist einfach der aktuellste.
Der Browser wird eine HTML-Seite daran aber nur erkennen, wenn kein
Content-Type Header gesendet wurde und das Dokument keine ungültigen
Zeichen (Nullbytes, Kontrollcharakter, etc.) enthält. Beim 2. Screenshot
scheint das letzte Zeichen ein ungültiges Zeichen zu sein.
Ist das im Screenshot ein Firefox Browser? Dort kann man die Header in
den Entwicklertools unter Netzwerkanalyse anschauen, das Fenster sollte
sich mit F12 oder Control+Shift+K öffnen lassen. Bei einer HTML Seite
sollte der Server einer der folgen 2 Responseheader senden:
1
Content-Type: text/html; charset=utf-8
2
Content-Type: text/html
Ich vermute das der Header nicht mitgesendet wird.
ja ist ein Firefox.
muss ich das zum Anfang senden
Content-Type: text/html; charset=utf-8 Content-Type: text/html
vielleicht könnten sie mir das nochmal zeigen in dem Programm was ich
hier zeigte.
mfg
Der Webserver muss nur einen der beiden Header senden, und das dass
nicht passiert ist nur eine Vermutung, da ich ja nicht nachsehen kann
welche header gesendet werden. Bitte überprüfen sie zuerst, ob der
Header gesendet wird, ich habe bereits 2 möglichkeiten aufgezeigt wie
man das nachsehen könnte.
Eigentlich enthält der Server bereits code, der den Header senden
sollte: (zeile 200)
https://github.com/adamdunkels/uip/blob/master/apps/webserver/httpd.c
Ich sehe keinen Code, der einen HTTP header sendet.
Du sendest offensichtlich nur das Dokument.
Programmiere doch erstmal einen Dummy Webserver auf dem PC, indem du
alles was du sendesn willst in eine Textdatei schreibst und die dann mit
Hilfe von Netcat auslieferst.
http://www.commandlinefu.com/commands/view/9164/one-command-line-web-server-on-port-80-using-nc-netcat
Auf diese Art kannst du die Grundlagen des HTTP protokolls ausprobieren.
Könnte mir denn einer von ihnen noch weiterhelfen.
ich habs jetzt n bischen anderst gemacht.
Ich bekomme die webseite beim ersten Aufruf korrekt Angezeigt, wenn ich
meine daten eingebe und den Submittenbutton drücke bekomme ich die Seite
micht richtig Angezeigt.
mfg
Ich sehe immer noch keinen HTTP Header im Quelltext.
Ist Dir der Unterschied zwischen HTTP header und HTML Header klar?
Vermutlich nicht. Google mal danach.
Stefan U. schrieb:> Ich sehe immer noch keinen HTTP Header im Quelltext.>> Ist Dir der Unterschied zwischen HTTP header und HTML Header klar?> Vermutlich nicht. Google mal danach.
PSOCK_SEND_STR(&s->sout,("\<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01
Transitional//EN\">\<html><head><meta http-equiv=\"Content-Type\"
content=\"text/html;charset=iso-8859-1\">\<form action=\"/switch.shtml\"
accept-charset=\"ISO-8859-1\" method=\"get\"
bgcolor=\"#808080\">\<table>\<tr><td>WOHNZIMMER:</td><td><input
type=\"text\" name=\"woh\" size=\"15\" maxlength=\"15\" value=\""));
ist doch im code
Könnte mir den einer nochmal sagen was im code nicht richtig ist.
Sie sagen mir das muss du so machen aber ich weiss nicht wie ich das
umsetzten muss.
mfg
hallo, also müsste der http header nach dieser zeile eingesetzt werden.
PSOCK_SEND_STR(&s->sout,("\<form action=\"/setting.shtml\"
method=\"get\" bgcolor=\"#808080\">\<table>\<tr><td>MAC:</td><td><input
type=\"text\" name=\"mac\" size=\"18\" maxlength=\"18\" value=\""));
hier denn der http header
könnte mir denn mal jemand von ihnen mir das zeigen was ich genau
schreiben muss.
ich bekomme das nicht zum laufen.
wenns möglich ist.
mfg
Hallo,
andre schrieb:> PSOCK_SEND_STR(&s->sout,("\<form action=\"/setting.shtml\"> method=\"get\" bgcolor=\"#808080\">\<table>\<tr><td>MAC:</td><td><input> type=\"text\" name=\"mac\" size=\"18\" maxlength=\"18\" value=\""));
das schickt doch schon ein Formular und den Teil einer Tabelle, das
gehört doch schon in den <body>, der http-Header muß als erstes gesendet
werden.
Ich habe uip-Stack noch nie benutzt, weiß also nicht, was der in seinen
Funktionen genau macht.
Das hier "\<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01
Transitional//EN\">\
gehört ja zum http-Header, ein kompletter sieht etwa so aus:
"HTTP/1.1 404 Not found\r\nContent-Length:
~response-length~\r\nContent-Type: text/html\r\nConnection:
close\r\n\r\n"
Wichtig sind auch die beiden NewLine am Ende.
Gruß aus Berlin
Michael
Michael U. schrieb:> Hallo,>> andre schrieb:> PSOCK_SEND_STR(&s->sout,("\<form action=\"/setting.shtml\"> method=\"get\" bgcolor=\"#808080\">\<table>\<tr><td>MAC:</td><td><input> type=\"text\" name=\"mac\" size=\"18\" maxlength=\"18\" value=\""));>> das schickt doch schon ein Formular und den Teil einer Tabelle, das> gehört doch schon in den <body>, der http-Header muß als erstes gesendet> werden.>> Ich habe uip-Stack noch nie benutzt, weiß also nicht, was der in seinen> Funktionen genau macht.>> Das hier "\<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01> Transitional//EN\">\
hallo,
danke für die Mühe aber ich bekomme das so nicht umgesetzt das es
funktioniert.
> gehört ja zum http-Header, ein kompletter sieht etwa so aus:>> "HTTP/1.1 404 Not found\r\nContent-Length:> ~response-length~\r\nContent-Type: text/html\r\nConnection:> close\r\n\r\n">> Wichtig sind auch die beiden NewLine am Ende.>> Gruß aus Berlin> Michael
Du hast einen HTML Header, es fehlt aber noch der HTTP Header. Ich halte
es für nicht gerade Zielführend, wenn wir Dir hier Schlückchen für
Schlückchen das HTTP Protokoll erklären.
Dazu gibt es bereit ohne Übertreibung hunderte Tutorials und außerdem
sollten Programmierer imstande sein, die Spezifikationen (RFC Dokumente)
lesen zu können, auf die Wikipedia verweist.
Gerade diese grundlegenden Internet Protokolle sind bis zum erbrechen
dokumentiert.
Wenn du immer noch nichts findest, dann schau hier in Band 2, Kapitel
10.4 von dem Buch:
http://stefanfrings.de/mikrocontroller_buch/index.html> ich bekomme das so nicht umgesetzt das es funktioniert
Deswegen sollst du ja auch erstmal mit netcat üben, statt auf dem
Mikrocontroller. Hast Du dir den obigen Link wegen netcat überhaupt mal
angesehen?
Stefan U. schrieb:> Du hast einen HTML Header, es fehlt aber noch der HTTP Header. Ich> halte es für nicht gerade Zielführend, wenn wir Dir hier Schlückchen für> Schlückchen das HTTP Protokoll erklären.> Dazu gibt es bereit ohne Übertreibung hunderte Tutorials und außerdem> sollten Programmierer imstande sein, die Spezifikationen (RFC Dokumente)> lesen zu können, auf die Wikipedia verweist.>> Gerade diese grundlegenden Internet Protokolle sind bis zum erbrechen> dokumentiert.>> Wenn du immer noch nichts findest, dann schau hier in Band 2, Kapitel> 10.4 von dem Buch:> http://stefanfrings.de/mikrocontroller_buch/index.html>> ich bekomme das so nicht umgesetzt das es funktioniert>> Deswegen sollst du ja auch erstmal mit netcat üben, statt auf dem> Mikrocontroller. Hast Du dir den obigen Link wegen netcat überhaupt mal> angesehen?
das hab ich mir angesehen.
ich dachte auf dem mikrokontroller wäre das einfacher zu testen.
Michael U. schrieb:> Das hier "\<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01> Transitional//EN\">\> gehört ja zum http-Header
Nein, das ist der Doctype, der gehört zum HTML Dokument, und zudem ist
er am falschen Ort.
Der Webserver setzt die Ausgaben von der Funktion switch_time in
switch.shtml dort ein, wo "%! switch" steht.
andre schrieb:> könnte mir denn mal jemand von ihnen mir das zeigen was ich genau> schreiben muss.
Wir wissen immernoch nicht, was für HTTP Header beim Browser nun
tatsächlich ankommen. Der Content-Type Header gehört in keinen der
bisher geposteten code. Ich habe auch bereits die Relevante Codestelle
verlinkt, wo der Header eigentlich gesetzt werden sollte.
Daniel A. schrieb:> Eigentlich enthält der Server bereits code, der den Header senden> sollte: (zeile 200)> https://github.com/adamdunkels/uip/blob/master/apps/webserver/httpd.c
1
} else if(strncmp(http_html, ptr, 5) == 0 ||
2
strncmp(http_shtml, ptr, 6) == 0) {
3
PSOCK_SEND_STR(&s->sout, http_content_type_html);
Wenn tatsächlich dieser code Ausgefürt wird, und diese Bedingung nicht
zutrifft, würde eine Header "Content-Type: text/plain" gesendet,
ansonsten ein "Content-Type: text/html" und falls ich mit meinen Annahme
falsch liege, würde gar kein "Content-Type" header gesendet. Könntest du
also bitte endlich mal die Response Header von beiden Requests posten?
Daniel A. schrieb:> Michael U. schrieb:> Das hier "\<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01> Transitional//EN\">\> gehört ja zum http-Header>> Nein, das ist der Doctype, der gehört zum HTML Dokument, und zudem ist> er am falschen Ort.>
ist nicht der http header?
kann mir jemand ein beispiel zeigen das zu meiner anwendung passt.
> Der Webserver setzt die Ausgaben von der Funktion switch_time in> switch.shtml dort ein, wo "%! switch" steht.>> andre schrieb:> könnte mir denn mal jemand von ihnen mir das zeigen was ich genau> schreiben muss.>> Wir wissen immernoch nicht, was für HTTP Header beim Browser nun> tatsächlich ankommen. Der Content-Type Header gehört in keinen der> bisher geposteten code. Ich habe auch bereits die Relevante Codestelle> verlinkt, wo der Header eigentlich gesetzt werden sollte.>> Daniel A. schrieb:> Eigentlich enthält der Server bereits code, der den Header senden> sollte: (zeile 200)> https://github.com/adamdunkels/uip/blob/master/app...>> } else if(strncmp(http_html, ptr, 5) == 0 ||> strncmp(http_shtml, ptr, 6) == 0) {> PSOCK_SEND_STR(&s->sout, http_content_type_html);>> Wenn tatsächlich dieser code Ausgefürt wird, und diese Bedingung nicht> zutrifft, würde eine Header "Content-Type: text/plain" gesendet,> ansonsten ein "Content-Type: text/html" und falls ich mit meinen Annahme> falsch liege, würde gar kein "Content-Type" header gesendet. Könntest du> also bitte endlich mal die Response Header von beiden Requests posten?
mach morgen früh gleich.
ok gut danke das ist ja auch bei den code drn ich verwende mit drin in
der httpd.c
nur wie die funktion aifgerufen wird und mit weöchen parameter ist mir
schleierhaft.
>>> Das hier "\<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01>>> Transitional//EN\">\>>> gehört ja zum http-Header>> Nein, das ist der Doctype, der gehört zum HTML Dokument, und zudem ist>> er am falschen Ort.>ist nicht der http header?> kann mir jemand ein beispiel zeigen das zu meiner anwendung passt.
Hoffnungslos....
Nein, das ist kein HTTP Header. Wie oft muss man das noch wiederholen?
Lies mein Buch, Mann! Und dann arbeite mindestens ein Tutorial durch,
welches das HTTP Protokoll erklärt.
Dein Problem ist nicht uIP, sondern dass du das HTTP Protokoll nicht
verstanden hast. Also komm mal von dem Mikrocontroller weg und übe mit
netcat auf dem PC. Konzentriere dich auf's Wesentliche. Du doktorst da
an einem Symptom herum, und versuchst nicht einmal, das Problem zu
erfassen.
HTTP kannst du offensichtlich ein bisschen. Jetzt lerne HTTP.
Ohne HTTP Kenntnisse bleibt Dir nichts anderes übrig, als fremden Code
abzuschreiben. Der Lerneffekt wäre dann aber annähernd null und bei
deinem aktuellen Kenntnisstand wird sich Erfolg so sehr wahrscheinlich
nicht einstellen.
HTTP ist kein Hexenwerk. Hab keine Angst davor!
hallo,
ich hab mir das
>Wenn du immer noch nichts findest, dann schau hier in Band 2, Kapitel>10.4 von dem Buch:>http://stefanfrings.de/mikrocontroller_buch/index.html
durchgelesen.
ob ich das nun so Richtig umgesetzt hab.
wenn ich die Seite im Browser Aufrufe 192.168.1.156/switch.shtml wird
alles korrekt geladen, dann gebe ich meine werte ein und drücke den
Submid Button dann startet der Browser mit dem Download der Seite
192.168.1.156/switch.shtml.
ich wollte das die seite mir angezeigt wird und kein Download.
andre schrieb:> anbei noch die Response header
Das sind doch die Response Header von den Dateien die Korrekt geladen
wurden. Mich interessiet der Response Header der Seite die Ankommt
nachdem der Submit button gedrückt wurde, also von der Seite die nicht
richtig Angezeigt wird.
Hallo Andre,
ohne die die genaue Antwort (inkl. Headern) des Servers zu kennen, lässt
sich das Problem nicht konstruktiv eingrenzen.
Bereits weiter oben wurden cURL und wget angesprochen (beides auch für
Windows verfügbar). Alternativ kannst du die Daten auch mit Wireshark
mitschneiden oder per Terminal (z.B. PuTTY oder Telnet) eine Verbindung
herstellen. Zu letzterem findest du im bereits verlinkten Wikipedia ein
Beispiel als Referenz.
Viele Grüße,
Marcel
andre schrieb:> Das kommt nach dem Submid button drücken
Danke. Das ist jetzt etwas unerwartet, da ich jetzt nicht weiss, ob die
Response Header nicht angezeigt werden weil es ein Download war oder ob
tatsächlich keine gesendet werden.
andre schrieb:> ich wollte das die seite mir angezeigt wird und kein Download.
Gibt es abgesehen von den Änderungen an den HTML Files sonst noch
irgendetwas, das du geändert hast?
Warscheinlich zeigt der Browser keinen Response Header an, weil die
Response keinen Header hat. Das wird auch Ursache für das unerwartete
Download Fenster sein.
Die drei html/shtml Dateien enthalten keinen HTTP Header - hätte ich
dort auch nicht erwartet.
Du hast immer noch nicht mit netcat, wget und experimentiert, richtig?
Ich kaue Dir das mal vor, für Linux, zum Abtippen:
echo -e "HTTP/1.1 200 OK\r\nContent-Type:
text/html\r\nConnection:closed\r\n\r\n<html><body>Hello
World</body></html>" | netcat -l 8080
Dann rufst du im Webbrowser http://localhost:8080 auf, und du erhälst
bild1.
Jetzt das Selbe nocmal ohne HTTP Header (also falsch):
echo -e "<html><body>Hello World</body></html>" | netcat -l 8080
http://localhost:808
Du erhälst bild2 oder einen Download-Fenster.
Noch Fragen?
Nachtrag: Sorry, ich habe ich vertippt. Es sollte "close" statt "closed"
heissen.
Der Server antwortet immer zuerst mit einem HTTP header, gefolgt vom
Dokument. Der HTTP Header endet mit einem doppelten Zeilenumbruch (oder
anders gesagt mit einer Leerzeile).
Du wirst warscheinlich PSOCK_SEND_STR nicht nur zum senden des HTML
Dokumentes verwenden, sondern auch, um den HTTP Header zu senden.
> mit Netcat hab ich noch nicht gearbeitet.
Warum nicht, willst du uns verärgern? Also ich lass dich jetzt mit dem
Problem alleine, ich hab keine Lust mehr auf das Thema. Vor allem
deswegen nicht, weil du allem Anschein nach alle hilfreichen Ratschläge
konsequent ignorierst.
Wie hilft man dem Patienten, wenn er die Medizin verweigert?
Stefan U. schrieb:> Der Server antwortet immer zuerst mit einem HTTP header, gefolgt> vom Dokument. Der HTTP Header endet mit einem doppelten Zeilenumbruch> (oder anders gesagt mit einer Leerzeile).>> Du wirst warscheinlich PSOCK_SEND_STR nicht nur zum senden des HTML> Dokumentes verwenden, sondern auch, um den HTTP Header zu senden.>> mit Netcat hab ich noch nicht gearbeitet.>> Warum nicht, willst du uns verärgern? Also ich lass dich jetzt mit dem> Problem alleine, ich hab keine Lust mehr auf das Thema. Vor allem> deswegen nicht, weil du allem Anschein nach alle hilfreichen Ratschläge> konsequent ignorierst.>> Wie hilft man dem Patienten, wenn er die Medizin verweigert?
Das ist für mich Relatives Neuland ,
ich hab das nicht so richtig verstanden.
Im Browser rufe ich meine Seite auf die wird auch Aufgebaut, nur eben
dann nicht wenn ich den Submid Button Drücke ist klar weil kein Http
header gesendet wird.
Reicht es den aus in meiner switch.shtml als erstes den Dokument typ und
in meinem Mikrokontroller als erstes den Http header senden und dann
meine Daten.
Danach hatte ich gefragt von alleine kriege ich das nich hin.
Trozdem vielen Dank
Sie sind vielleicht Profis in der Materie ich aber nicht.
Stefan U. schrieb:> Ich kaue Dir das mal vor, für Linux, zum Abtippen:>> echo -e "HTTP/1.1 200 OK\r\nContent-Type:> text/html\r\nConnection:closed\r\n\r\n<html><body>Hello> World</body></html>" | netcat -l 8080>> Dann rufst du im Webbrowser http://localhost:8080 auf, und du erhälst> bild1.>> Jetzt das Selbe nocmal ohne HTTP Header (also falsch):>> echo -e "<html><body>Hello World</body></html>" | netcat -l 8080>> http://localhost:808>> Du erhälst bild2 oder einen Download-Fenster.>> Noch Fragen?>> Nachtrag: Sorry, ich habe ich vertippt. Es sollte "close" statt "closed"> heissen.
kann mir denn noch jemand von ihnen weiterhelfen und sagen was ich
falsch mache.
Anhand meines beispiels sagen warum das nicht geht.
Hab ich so gemacht trotzdem wenn ich auf den Button submid drücke
erscheind das downloadfenster
Die Html seite ist das so richtig
Beitrag "Re: uip Datten zum Webserver"
ist denn das so richtig im code?
Jetzt sendest du einen kaputten Header (wegen dem "<" am Anfang),
gefolgt von einer leeren HTML Seite, gefolgt von einem Formular, dass
sich außerhalb des HTML Dokumentes befindet, als auch kaputt.
Komm endlich von dem Mikrocontroller weg und schreibe erstmal
TEXTDATEIEN, um das HTTP Protkoll und die HTML Dokumente zu testen.
Benutze netcat, und wegt oder curl. Benutze Wireshark.
Du fummelst da in einem Code herum, den du nicht einmal ansatzweise
verstanden hast und willst damit ein Protokoll implementieren, dass du
auch gar nicht verstanden hast. Und mit diesem Protokoll willst du ein
Dokument austauschen, dass du auch nicht verstanden hast.
Verstehe doch: Du hast da zu viele Baustellen auf einmal. Keine Ahnung
von nichts, aber das alles miteinander kombiniert. So kannst du
unmöglich erfolgreich voran kommen.
Du willst ein Auto bauen, weisst aber nicht, wie ein Ottomotor
funktioniert, hast keine Ahnung von der Elektrik und auch nicht von
Hydraulik und Statik. Aber ein Auto bauen wollen. Das geht nicht!
Mach eins nach dem Anderen. Lerne erstmal die Grundlagen von HTTP und
HTML, bevor du das irgendwo in ein Programm verpackst.
Stefan U. schrieb:> Jetzt sendest du einen kaputten Header (wegen dem "<" am Anfang),> gefolgt von einer leeren HTML Seite, gefolgt von einem Formular, dass> sich außerhalb des HTML Dokumentes befindet, als auch kaputt.
In der switch.shtml steht im Kopf das der Dock Typ.
in meinem C-Cose steht als erstes der Http Header.
so hab ich das versucht nach ihren Hinweisen umzusetzten.
>> Komm endlich von dem Mikrocontroller weg und schreibe erstmal> TEXTDATEIEN, um das HTTP Protkoll und die HTML Dokumente zu testen.> Benutze netcat, und wegt oder curl. Benutze Wireshark.>> Du fummelst da in einem Code herum, den du nicht einmal ansatzweise> verstanden hast und willst damit ein Protokoll implementieren, dass du> auch gar nicht verstanden hast. Und mit diesem Protokoll willst du ein> Dokument austauschen, dass du auch nicht verstanden hast.
Dann weiss aber immernoch nicht ob das im Mikrokontroller funktioniert.
>> Verstehe doch: Du hast da zu viele Baustellen auf einmal. Keine Ahnung> von nichts, aber das alles miteinander kombiniert. So kannst du> unmöglich erfolgreich voran kommen.>> Du willst ein Auto bauen, weisst aber nicht, wie ein Ottomotor> funktioniert, hast keine Ahnung von der Elektrik und auch nicht von> Hydraulik und Statik. Aber ein Auto bauen wollen. Das geht nicht!>> Mach eins nach dem Anderen. Lerne erstmal die Grundlagen von HTTP und> HTML, bevor du das irgendwo in ein Programm verpackst.
Es gibt auch nirgends ein Beispiel für meine Aplikation wo ich ein
bischen Testen oder üben könnte.
Sie sagen ich muss das so und so machen aber das bekomme ich so nicht
hin.
mfg
Schreibe doch erstmal funktionierende Textdateien, die du mit netcat als
Server an den Web Browser auslieferst.
Dann bekommst du eine Vorstellung davon, wie ein HTTP Header und HTML
Dokument aussehen muss.
Wenn du das richtig gemacht hast, und das dann richtig in C
programmierst, wird es dort auch funktionieren.
> Es gibt auch nirgends ein Beispiel für meine Aplikation wo> ich ein bisschen Testen oder üben könnte.
Selbst wenn, würde Dir das nichts nützen. Du würdest dann den
funktionierenden Code abtippen ohne ihn zu verstehen.
Ich will doch jetzt nicht entmutigen, aber das, was da bei Dir nicht
klappt, ist für erfahrene Programmierer total simple Pillepalle.
Du musst die Arbeit nur strukturiert angehen und dich Schritt für
Schritt einarbeiten. Du hast bereits mehr als genug Tipps bekommen,
welche Software dabei hilft und wo du Anleitungen findest. Dein Problem
ist, dass du die Einzelteile dieses Puzzles nicht zusammen setzen
kannst.
Jede weitere Frage kann nur noch dazu führen, dass diese Diskussion sich
weiter im Kreis dreht. An diesem Punkt kann man Dir keinen Ratschlag
mehr geben. Man könnte Dir nur noch das ganze Programm fertig stellen.
Aber das ist nicht der Sinn dieses Forums.
Das solltest das Strukturierte Arbeiten üben, sonst wirst du nie
ernsthaft programmieren. Zerlege deine Arbeit in Teilaufgaben. Fange mit
Dingen an, mit denen Du schon vertraut bist. Und nutze Programme, die
bereits funktionieren. Erstelle Schritt für Schritt die einzelnen
Komponenten, und setze sie erst zusammen, wenn sie alle einzeln
funktionieren. Nutze Simulationen!
Genau das ist die Kunst des Programmierens.
> Es gibt auch nirgends ein Beispiel für meine Aplikation wo> ich ein bisschen Testen oder üben könnte.
Doch gibt es, sogar ein sehr passendes Beispiel:
http://stefanfrings.de/net_io/index.html
Aber Obacht: Der HTTP Server in diesem Projekt hat nicht mehr viel mit
dem alten Original-Code von µIP gemeinsam. Er ist über mehrere Jahre
weiter gewachsen.
erstmal vielen Dank,
mit Kommandozeilen Tool kenn ich mich wenig aus.
Auf deiner Seite hab ich mir schon das netio runter geladen aber das ist
ja schon etwas erweitert zum original uip.
ich dachte es gibt irgendwo ein Beispiel was lauffähig ist wo ich auch
etwas üben kann mit dem uip und dies auch verstehe wie was gemacht wird.
vielleicht finde ich etwas.
trotzdem danke.
auch wenn sie Denken ich bin lernresistend.
mfg
> ich dachte es gibt irgendwo ein Beispiel was lauffähig> ist wo ich auch etwas üben kann mit dem uip
Ja dann nimm doch mein Beispiel!
Das kannst du sogar als Betriebsbereites Fertigprodukt kaufen und der
Quelltext liegt vor Dir. Und es funktioniert - ehrenwort!
> mit Kommandozeilen Tool kenn ich mich wenig aus.
Dann lerne, damit umzugehen. Ist in vielerlei Hinsicht sinnvoll, wenn
nicht gar notwendig.
Ich hab das nun so gemacht wie sie mir gesagt haben
Anbei nochmal mein Code es kommt nach wie vor das Download Fenster.
Meine Html dateien Beitrag "Re: uip Datten zum Webserver"
Kann mir nochmal jemand helfen das die seite angezeigt wird nachdem ich
den Submid Button gedrückt habe.
mfg
Jetzt hast du einen HTTP Header, gefolgt von einer leeren und kaputten
Webseite, gefolgt von einem total zerstückeltem Formular, dass sich
außerhalb des HTML Dokumentes befindet.
Und ich stelle fest, das du meine ernst gemeinten Ratschläge immer noch
ALLE knallhart ignorierst. Meinst du, es mach Spass, Dir so zu helfen?
Nein, es macht keinen Spaß! Es nervt nur noch. Ich bin beleidigt, denn
du bittest immer wieder um weitere Hilfe während du die vorherige Hilfe
nicht annimmst.
Trenne dich von dem Mikrocontroller! Du hast gefühlt 100 mal Quelltexte
gepostet, obwohl dein Problem nicht das Programm ist, sondern, dass du
HTTP und HTML immer noch nicht einmal in den Grundzügen verstanden hast.
Dein C Programm macht die ganze Sache nur unnötig komplizierter.
Wie willst du ein Programm schreiben, das Text erzeugt, wenn du keinen
Plan hast, wie der Text überhaupt aussehen soll?
Wie lange wird es noch dauern, bis zu
a) Ratschläge annimmst und
b) erkennst oder glaubst, dass deine Aktuelle Arbeitsweise für alle
Beteiligten reine Zeitverschwendung ist?
Such Dir ein anderes Hobby!
So, das war's. Ich habe fertig.
Stefan U. schrieb:> Jetzt hast du einen HTTP Header, gefolgt von einer leeren und> kaputten Webseite, gefolgt von einem total zerstückeltem Formular, dass> sich außerhalb des HTML Dokumentes befindet.>> Und ich stelle fest, das du meine ernst gemeinten Ratschläge immer noch> ALLE knallhart ignorierst. Meinst du, es mach Spass, Dir so zu helfen?>
Nein ich habe das nicht ignoriert.
Ich habe nur mehrmals gefragt wie manns richtig macht.
bekomme immer nur als Antwort von ihnen das musst du so machen und so..
ich habe auch gesagt das ich das so nich umsetzen kann und nach einem
Beispiel gefragt was für sie ein leichtes wäre.
Für mich ist es das nicht.
> Nein, es macht keinen Spaß! Es nervt nur noch. Ich bin beleidigt, denn> du bittest immer wieder um weitere Hilfe während du die vorherige Hilfe> nicht annimmst.>
Doch nehme ich an.
> Trenne dich von dem Mikrocontroller! Du hast gefühlt 100 mal Quelltexte> gepostet, obwohl dein Problem nicht das Programm ist, sondern, dass du> HTTP und HTML immer noch nicht einmal in den Grundzügen verstanden hast.> Dein C Programm macht die ganze Sache nur unnötig komplizierter.
warum macht es das nur Komplizierter darum gehts doch.
> Wie willst du ein Programm schreiben, das Text erzeugt, wenn du keinen> Plan hast, wie der Text überhaupt aussehen soll?> Wie lange wird es noch dauern, bis zu>> a) Ratschläge annimmst und>> b) erkennst oder glaubst, dass deine Aktuelle Arbeitsweise für alle> Beteiligten reine Zeitverschwendung ist?>> Such Dir ein anderes Hobby!>> So, das war's. Ich habe fertig.
Hallo Andre,
es wurden sowohl von Stefan als auch von mir verschiedenste Tools
genannt, mit denen du dein Problem eingrenzen kannst.
Zur Bedienung von Wireshark gibt es zahlreiche Tutorials und
Youtube-Vidoes im Netz.
Wie du mit PuTTy oder einem anderen Terminal dein Protokoll debuggen
kannst steht ebenfalls in dem schon mehrfach verlinkten
Wikipedia-Artikel.
Und die Bedienung von cURL oder wget ist wirklich nicht kompliziert. Die
mitgelieferte Readme-Datei oder die Kommandozeilen-Hilfe sollten hier
sicher ausreichen. Ansonsten gibt es auch hierzu sicher massig Tutorials
im Netz.
Bei Netcat sieht es nicht anders aus.
Vielleicht solltest du an dieser Stelle einmal ansetzen.
Viele Grüße,
Marcel
Marcel schrieb:> Hallo Andre,>> es wurden sowohl von Stefan als auch von mir verschiedenste Tools> genannt, mit denen du dein Problem eingrenzen kannst.> Zur Bedienung von Wireshark gibt es zahlreiche Tutorials und> Youtube-Vidoes im Netz.> Wie du mit PuTTy oder einem anderen Terminal dein Protokoll debuggen> kannst steht ebenfalls in dem schon mehrfach verlinkten> Wikipedia-Artikel.> Und die Bedienung von cURL oder wget ist wirklich nicht kompliziert. Die> mitgelieferte Readme-Datei oder die Kommandozeilen-Hilfe sollten hier> sicher ausreichen. Ansonsten gibt es auch hierzu sicher massig Tutorials> im Netz.> Bei Netcat sieht es nicht anders aus.> Vielleicht solltest du an dieser Stelle einmal ansetzen.>> Viele Grüße,> Marcel
Vielen Dank.
ich vermute das mein Ptoblem im Programm vom mikrokontroller liegt.
@andre
Ich glaube langsam Sie wissen nicht, wie man ein Problem richtig löst.
Einerseits gibt es für alles einen grund. Eine Sache ist niemals so wie
sie ist, nur weil sie so ist, wie sie ist. Dann muss man möglichst alles
über die Sache wissen, die man umsetzen will. Bei einem Problem mus man
folgendes machen:
1) Überlegen, worin das Problem besteht (HTML Seite wird als Plain Text
interpretiert)
2) Überlegen, was passieren sollte (HTML Seite wird als HTML Seite
interpretiert)
3) Eine vermutung anstellen, was passiert sein könnte (Die empfangenen
daten könnten fehlerhaft sein)
4) Überlegen, was an der Vermuteten stelle passieren müsste (Ein html
header mit dem korrekten Headerfeldern, gefolgt fon einer gültigen html
seite wird gesendet)
5) Vermutung verifizieren (nachsehen, was gesendet wurde (was
tatsächlich gesendet wurde, nicht was firefox anzeigt))
6) Überlegen, ob etwas anders als erwartet ist, falls nicht, zurück zu
3.
7) Überlegen, ob das was anders ist die Ursache sein könnte, falls
nicht, zurück zu 3.
8) Ist es ein Fehler, den du korrigieren kannst?
9.a) Falls ja, korrigiere den Fehler.
9.b) Andernfalls hast du ein neues Problem gefunden, fange wieder bei
1. an, aber mit dem neuen Problem.
> ich vermute das mein Problem im Programm vom mikrokontroller liegt.
NEIN NEIN NEIN NEIN NEIN NEIN NEIN NEIN NEIN NEIN NEIN NEIN NEIN NEIN
NEIN
Das Problem ist, dass die Strings schon falsch sind. Das programm gibt
sie nur genau so falsch wieder, wie sie geschrieben wurden.
Beispiel für ein minimales gültiges HTML Formular mit HTTP Header:
1
HTTP/1.1 200 OK
2
Content-Type: text/html
3
Connection:close
4
5
<html>
6
<head>
7
</head>
8
<body>
9
<form>
10
<inputtype="text"name="feld"value="Hallo">
11
<inputtype="submit"name="knopf">
12
</form>
13
</body>
14
</html>
Mehr also gültige Beispiele und Verweise zu ANleitungen kann man Dir
nicht geben. Wenn du die Unterscheide nzu deinem Code nicht erkennen
kannst, dann ist es hoffnungslos.
Stefan U. schrieb:> Beispiel für ein minimales gültiges HTML Formular mit HTTP Header:> HTTP/1.1 200 OK> Content-Type: text/html> Connection:close>> <html>> <head>> </head>> <body>> <form>> <input type="text" name="feld" value="Hallo">> <input type="submit" name="knopf">> </form>> </body>> </html>>> Mehr also gültige Beispiele und Verweise zu ANleitungen kann man Dir> nicht geben. Wenn du die Unterscheide nzu deinem Code nicht erkennen> kannst, dann ist es hoffnungslos.
ich habs genau so gemacht wie Vorgeschlagen aber mit dem selben
Ergebniss
wie hier Beitrag "Re: uip Datten zum Webserver"
mfg
> ich habs genau so gemacht wie Vorgeschlagen
Genau so? Und warum sind die Strings in deinem Code dann völlig andere?
Die Anzahl der Zeilenumbrüche ist schon wieder falsch, obwohl du es
zwischendruch auch schonmal richtig hattest.
Und noch immer weigerst du dich, mit Textdateien und netcat (statt µC)
zu arbeiten.
Dir ist nicht mehr zu helfen. Ende.
Stefan U. schrieb:> ich habs genau so gemacht wie Vorgeschlagen>> Genau so? Und warum sind die Strings in deinem Code dann völlig andere?> Die Anzahl der Zeilenumbrüche ist schon wieder falsch, obwohl du es> zwischendruch auch schonmal richtig hattest.>
Was mach ich denn da Falsch?? ihr sagt mir immer das ist nicht richtig
das ist falsch.
Der Header wird mir auch auf der Webseite angezeigt, hab ich so gemacht
wie von ihnen gesagt aber das haut ja auch nicht hin.
Ein Beispiel für meine Applikation wie es richtig geht kann mir
scheinbar niemand helfen.
> Und noch immer weigerst du dich, mit Textdateien und netcat (statt µC)> zu arbeiten.>
tschuldigung aber was bringt mir das wenn das programm im
Mikrokontroller nicht richtig hinhaut.
> Dir ist nicht mehr zu helfen. Ende.
wenn sie das so sehen.
andre schrieb:> Stefan U. schrieb:>> ich habs genau so gemacht wie Vorgeschlagen>>>> Genau so? Und warum sind die Strings in deinem Code dann völlig andere?>> Die Anzahl der Zeilenumbrüche ist schon wieder falsch, obwohl du es>> zwischendruch auch schonmal richtig hattest.>>>> Was mach ich denn da Falsch?? ihr sagt mir immer das ist nicht richtig> das ist falsch.
Es wäre Deine Aufgebe gewesen herauszufinden wie HTTP und HTML genau
auszusehen haben. Das ist nicht komplett trivial weil viele Seiten im
Internet nur HTML und nicht die HTTP Serverseite behandeln, dennoch
halte ich die Aufgabe für durchschnittliche Kinder ab Teenageralter
lösbar. In viel kürzerer Zeit als dem jetztigen Alter des Threads.
Das übersetzen dieser Infos nach "C" Schreibweise ist danach völlig
trivial.
Leider ist auch keinerlei Initiative zum Erlernen dieser Grundlagen zu
erkennen. Damit ist jede echte Hilfe praktisch ausgeschlossen. Es
besteht nur noch die Möglichkeit, den Quelltext für Dich gegen
Unkostenbeitrag komplett zu erstellen.
@andre,
Wenn du dich mit dem Headern von http und html nicht weiter
auseinandersetzen willst fang doch mal anders an.
Da der 1. Aufruf der Seite ja funktioniert, und dort Header und Daten
ordnungsgemäß übertragen werden solltest du im Quelltext mal schauen was
beim 2. Abruf bei welchem zuvor die neuen Einstellungen übergeben werden
anders läuft.
Sascha
Aber er kann ja noch nichtmal Leerzeilen richtig zählen und hat den
Unterschied zwischen <html> und </html> mehrmals durcheinander geworfen.
Da bezweifle ich, dass Andre den Knackpunkt durch Sichtkontrolle des
Quelltextes finden kann.
Sascha W. schrieb:> @andre,>> Wenn du dich mit dem Headern von http und html nicht weiter> auseinandersetzen willst fang doch mal anders an.> Da der 1. Aufruf der Seite ja funktioniert, und dort Header und Daten> ordnungsgemäß übertragen werden solltest du im Quelltext mal schauen was> beim 2. Abruf bei welchem zuvor die neuen Einstellungen übergeben werden> anders läuft.>> Sascha
ich habs mal mit dem Internet Explorer probiert und da gehts
einwandfrei.
Ich möchte wissen, welchen Schluss du daraus ziehst?
Wirst du jetzt nur noch Internet Explorer verwenden?
Oder wirst du versuchen, herauszufinden, warum andere Browser die Seite
nicht wie erwartet anzeigen?
Meinst du, dass der Internet Explorer besser ist, als andere?
Und warum funktionieren Andere Browser nicht, obwohl sie doch
Milliardenfach weltweit im Einsatz sind.
Warum hast du uns überhaupt informiert, dass es im Internet Explorer gut
aussieht? Was willst du uns damit sagen und was sagt es dir?
Ich stelle Fragen, um bei Dir die richtigen Gedanken anzuregen,
Strukturiert zu arbeiten und zum Ziel zu kommen. Antworten und
Lösungsvorschläge habe ja nichts gebracht, vielleicht helfen Fragen
besser.
Also, überlege Dir mal Antworten auf meine Fragen und schreibe sie uns.
Dann werde ich weitere Fragen stellen - so lange, bis es bei Dir "klick"
macht und du die Lösung sonnenklar vor Augen hast.
Sascha W. schrieb:> Da der 1. Aufruf der Seite ja funktioniert, und dort Header und Daten> ordnungsgemäß übertragen werden solltest du im Quelltext mal schauen was> beim 2. Abruf bei welchem zuvor die neuen Einstellungen übergeben werden> anders läuft.>
Scheinbar sind sie der Einzige hier der einzige hier der das Problem
erkennt danke.
Ja genau der erste Aufruf der Seite Funktioniert wie gewünscht.
scheinbar kann mir hier wohl niemand helfen.
Was im code verkehrt ist
Schau Dir an, was der Server zum Browser sendet und vergleiche dies mit
einem guten Beispiel oder der funktionierenden Seite.
Du wirst sehen, dass dort Teile fehlen, HTML Tags flasch geschlossen
wrden und Formulare an der falschen Stelle stehen. Diese Fehler musst du
einfach im Code finden und dort korrigieren.
Wenn da zum beispiel "<html>" steht, wo aber eigentlich "</html>"
hingehört, dann suche im Code nach diesem String und korrigiere ihn.
Und wenn da was fehlt, dann suche die Stelle im Code und fürge eine
zeile ein.
Und wenn da ein teil an der falschen Stelel ist, dann verschiebe den
entsprechenden Code.
Mir scheint allerdings, dass Dir nichtmal klar ist, wie das Ergebnis
(die HTML Seite) aussehen soll. Und das ist dein vorranginges Problem.
Dabei können wir Dir auch nicht helfen, denn nur du weisst, welcher
Inhalt in der Seite stehen soll.
Und noch guter Tip: Wenn man Dir Fragen stellt, dann beantworte sie.
Auch das gehört zum Helfen. Du musst schon mit machen, sonst
funktioniert dieses Hilfe-geben nicht.
Die Seite wird mir jetzt richtig angezeigt.
Aber nur wenn ich das so ändere in der letzten zeile:
PSOCK_SEND_STR(&s->sout,("\"/></td></tr>\<tr><td>FLUR</td><td><input
type=\"text\" name=\"flu\" size=\"15\" maxlength=\"15\" value=\""));
sprintf(temp,"%02d:%02d B %02d:%02d",
switch_buffer[20],switch_buffer[21],switch_buffer[22],switch_buffer[23])
;
ich wollte das gerne so haben
sprintf(temp,"%02d:%02d BIS %02d:%02d",
switch_buffer[20],switch_buffer[21],switch_buffer[22],switch_buffer[23])
;
Wenn ich das lasse und mache meine Eingaben dann wird die seite nicht
mehr angezeigt.
Womöglich ist dein temp Buffer nicht groß genug, um den längeren text
aufzunehmen.
Hast du eigentlich einen Plan, wozu das "\" Zeichen gut ist und wann man
es benötigt? Ich glaube, du solltest das lernen. Siehe
https://en.wikipedia.org/wiki/Escape_sequences_in_C
andre schrieb:> Mein Problem ist ich kann daten zum Webserver senden das geht und er> schickt mir die Daten wieder zurückt wird die Webseite nicht richtig> angezeigt.>> Vielleicht könnte mir einer weiterhelfen.
Der Client interpretiert die Ausgabe offensichtlich als "text/plain",
weil Du keinen HTTP-Header schickst. Ein passender HTTP-Header müßte vor
der ersten Ausgabe Deines Programms gesendet werden und sieht etwa so
aus:
andre schrieb:> Der Header wird mir auch auf der Webseite angezeigt, hab ich so gemacht> wie von ihnen gesagt aber das haut ja auch nicht hin.
In dem letzten Screenshot, den ich gesehen habe, wird der HTTP-Header
auf der Website angezeigt. Da liegt die Vermutung nahe, daß Dein Code
schon VOR dem HTTP-Header irgendwas ausgibt -- weshalb der HTTP-Header
dann als HTML-Dokument interpretiert und ausgegeben wird.
Anstatt hier ständig und immer wieder den Code zu posten, der Deine
Formularfelder ausgibt (das Zeichen '<' mußt Du übrigens NICHT mit einem
Backslash maskieren, nur die '"'), wäre es vielleicht sinnvoller, den
Teil zwischen
sprintf(temp,"%02d:%02d BIS %02d:%02d",
tefan U. schrieb:> Womöglich ist dein temp Buffer nicht groß genug, um den längeren> text aufzunehmen.>> Hast du eigentlich einen Plan, wozu das "\" Zeichen gut ist und wann man> es benötigt? Ich glaube, du solltest das lernen. Siehe> https://en.wikipedia.org/wiki/Escape_sequences_in_C
Ich habe nun so oft gefragt was in dem Code nicht stimmt höfflich.
sprintf(temp,"%02d:%02d: BIS %02d:%02d)
temp[50] ist gross genug um die paar zeichen aufzunehmen.
Für sie wäre das ein klacks mir zu helfen um die Fehler im code zu
beseitigen.
ich habe auch gesagt ich bekomme das ohne hilfe nicht richtig hin
andre schrieb im Beitrag #4534964:
> wird immer nur gesagt das muss so sein und so
Eigentlich wurde dass nie gesagt, es wurde aber manchmal erwähnt wie
etwas nicht sein muss, und was daran falsch ist,selbst wen es nicht das
eigentliche Problem war. Und dass man das Problem nicht dort lösen kann,
wo du es versuchst, hab ich auch schon längst geschrieben:
Daniel A. schrieb:> Der Content-Type Header gehört in keinen der bisher geposteten code.
Und wo versuchst du anschliessend den header zu senden? Genau dort wo
ich längst schrieb, dass er nicht hingehört.
Du musst endlich mal nach der Uhrsache des Problems suchen, wir haben
bereits gesagt weshalb der fehler beim Browser auftreten könnte, und wie
du das überprüfen kannst. Du scheinst aber einfach nicht über das nötige
wissen oder die Erfahrung zu verfügen um das Problem weiter
einzugrenzen. So wirst du das Problem niemals lösen können.
Daniel A. schrieb:> andre schrieb:>> wird immer nur gesagt das muss so sein und so>> Eigentlich wurde dass nie gesagt, es wurde aber manchmal erwähnt wie> etwas nicht sein muss, und was daran falsch ist,selbst wen es nicht das> eigentliche Problem war. Und dass man das Problem nicht dort lösen kann,> wo du es versuchst, hab ich auch schon längst geschrieben:>> Daniel A. schrieb:>> Der Content-Type Header gehört in keinen der bisher geposteten code.>> Und wo versuchst du anschliessend den header zu senden? Genau dort wo> ich längst schrieb, dass er nicht hingehört.>> Du musst endlich mal nach der Uhrsache des Problems suchen, wir haben> bereits gesagt weshalb der fehler beim Browser auftreten könnte, und wie> du das überprüfen kannst. Du scheinst aber einfach nicht über das nötige> wissen oder die Erfahrung zu verfügen um das Problem weiter> einzugrenzen. So wirst du das Problem niemals lösen können.
Die Seite wird beim ersten Aufruf ja korreckt angezeigt nur nicht nach
drücken vom Submid Button.
Mein Code: Beitrag "Re: uip Datten zum Webserver"
Im Anhang nochmal Die Screenshots.
Mit dem Tool netcat komm ich nicht zurecht.
Das Formular wird zum teil ausgegeben und dann ist plötzlich Ende. Die
switch.shtml wird nicht bis zu Ende zurückgeliefert. Ich denke, das
könnte darauf hindeuten, dass dein Programm nach der Ausgabe von "12:23
BIS 12:36" abstürzt.
Ich habe Dir schon vorher geschrieben, dass dein Puffer für diese
Ausgabe zu klein ist. Das Resultat passt dazu.
Hast du den Puffer vergrößert?
Gehe doch mal bitte auf die vielen Vorschläge und Rückfragen ein. Wenn
du uns nicht umfangreich mitteilst, was los ist, können wir nicht
richtig helfen.