Forum: Mikrocontroller und Digitale Elektronik uip Datten zum Webserver


von andre (Gast)


Angehängte Dateien:

Lesenswert?

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

1
static PT_THREAD(run_settings(struct httpd_state *s, char *ptr))
2
{  
3
    char temp[30];
4
    static uint8_t i,j;
5
    static uint8_t result;
6
    uint8_t pcount;
7
8
  PSOCK_BEGIN(&s->sout);
9
10
  //check if there are parameters passed 
11
  if(s->filename[0] && (pcount=http_get_parameters_parse(s->filename,sizeof(s->filename)))>0)
12
   {
13
     i= 0;
14
     result=(pcount==4 || pcount==5 ); //correct number of parameters
15
    
16
     _enable_dhcp=0;
17
    
18
     //walk through parameters
19
    for(i=0;i<pcount;i++)
20
    {
21
       static char *pname,*pval;
22
      pname=http_get_parameter_name(s->filename,i,sizeof(s->filename));
23
      pval =http_get_parameter_value(s->filename,i,sizeof(s->filename));
24
25
      if(!strcmp(pname,("mac")) )
26
      {  
27
        result = decode_mac(pval,_eth_addr);  
28
      }
29
      
30
      else if(!strcmp(pname,("dhcp")) )
31
      {  
32
        _enable_dhcp=(pval[0]=='1');      
33
      }
34
      
35
      else if(!strcmp(pname,("ip")) )       
36
      {  
37
        result =  decode_ip(pval,_ip_addr);
38
      }
39
      
40
      else if(!strcmp(pname,("netmask")) ) 
41
      {  
42
        result =  decode_ip(pval,_net_mask);
43
      }
44
      
45
      else if(!strcmp(pname,("gw")) ) 
46
      {  
47
        result =  decode_ip(pval,_gateway);
48
      }
49
      
50
      else
51
      {  
52
       result=0; //unknown parameter, probably an error!
53
      }
54
    }
55
56
    if(result) 
57
     {
58
     
59
       //IP-ADRESSE
60
       I2C_WriteByte(_ip_addr[0], 6, ADDR_24LC02);
61
       delay_ms(10);
62
       I2C_WriteByte(_ip_addr[1], 7, ADDR_24LC02);
63
       delay_ms(10);
64
       I2C_WriteByte(_ip_addr[2], 8, ADDR_24LC02);
65
       delay_ms(10);
66
       I2C_WriteByte(_ip_addr[3], 9, ADDR_24LC02);
67
       delay_ms(80);
68
       
69
       //MAC-ADRESSE
70
       I2C_WriteByte(uip_ethaddr.addr[0], 10, ADDR_24LC02);
71
       delay_ms(10);
72
       I2C_WriteByte(uip_ethaddr.addr[1], 11, ADDR_24LC02);
73
       delay_ms(10);
74
       I2C_WriteByte(uip_ethaddr.addr[2], 12, ADDR_24LC02);
75
       delay_ms(10);
76
       I2C_WriteByte(uip_ethaddr.addr[3], 13, ADDR_24LC02);       
77
       delay_ms(10);
78
       I2C_WriteByte(uip_ethaddr.addr[4], 14, ADDR_24LC02);  
79
       delay_ms(10);
80
       I2C_WriteByte(uip_ethaddr.addr[5], 15, ADDR_24LC02);  
81
       delay_ms(80);
82
83
       //NET-MASK
84
       I2C_WriteByte(_net_mask[0], 16, ADDR_24LC02);
85
       delay_ms(10);
86
       I2C_WriteByte(_net_mask[1], 17, ADDR_24LC02);
87
       delay_ms(10);
88
       I2C_WriteByte(_net_mask[2], 18, ADDR_24LC02);
89
       delay_ms(10);
90
       I2C_WriteByte(_net_mask[3], 19, ADDR_24LC02);  
91
       delay_ms(80);
92
93
       //GATEWAY
94
       I2C_WriteByte(_gateway[0], 20, ADDR_24LC02);
95
       delay_ms(10);
96
       I2C_WriteByte(_gateway[1], 21, ADDR_24LC02);
97
       delay_ms(10);
98
       I2C_WriteByte(_gateway[2], 22, ADDR_24LC02);
99
       delay_ms(10);
100
       I2C_WriteByte(_gateway[3], 23, ADDR_24LC02);  
101
102
        PSOCK_SEND_STR(&s->sout,("Parameters Accepted, cycle power to make active!"));
103
     }
104
     
105
     else 
106
     {
107
      PSOCK_SEND_STR(&s->sout,("Parameters incorrect!"));
108
     }
109
  }
110
  
111
  //IP-Adresse aus EEPROM Lesen
112
  _ip_addr[0] = I2C_ReadByte(6,ADDR_24LC02); 
113
  _ip_addr[1] = I2C_ReadByte(7,ADDR_24LC02); 
114
  _ip_addr[2] = I2C_ReadByte(8,ADDR_24LC02);            
115
  _ip_addr[3] = I2C_ReadByte(9,ADDR_24LC02);  
116
  
117
   //MAC-ADRESSE
118
  uip_ethaddr.addr[0] = I2C_ReadByte(10,ADDR_24LC02);  
119
  uip_ethaddr.addr[1] = I2C_ReadByte(11,ADDR_24LC02); 
120
  uip_ethaddr.addr[2] = I2C_ReadByte(12,ADDR_24LC02); 
121
  uip_ethaddr.addr[3] = I2C_ReadByte(13,ADDR_24LC02); 
122
  uip_ethaddr.addr[4] = I2C_ReadByte(14,ADDR_24LC02); 
123
  uip_ethaddr.addr[5] = I2C_ReadByte(15,ADDR_24LC02); 
124
  
125
   //NET-MASK
126
  _net_mask[0] = I2C_ReadByte(16,ADDR_24LC02);
127
  _net_mask[1] = I2C_ReadByte(17,ADDR_24LC02);  
128
  _net_mask[2] = I2C_ReadByte(18,ADDR_24LC02);
129
  _net_mask[3] = I2C_ReadByte(19,ADDR_24LC02);    
130
  
131
   //GATEWAY
132
  _gateway[0] = I2C_ReadByte(20,ADDR_24LC02);
133
  _gateway[1] = I2C_ReadByte(21,ADDR_24LC02);  
134
  _gateway[2] = I2C_ReadByte(22,ADDR_24LC02);
135
  _gateway[3] = I2C_ReadByte(23,ADDR_24LC02);  
136
  
137
138
139
  
140
  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=\""));
141
142
  snprintf(temp,sizeof(temp),("%02x:%02x:%02x:%02x:%02x:%02x"),
143
                               uip_ethaddr.addr[0],uip_ethaddr.addr[1],uip_ethaddr.addr[2],
144
                               uip_ethaddr.addr[3],uip_ethaddr.addr[4],uip_ethaddr.addr[5]);
145
146
  PSOCK_SEND_STR(&s->sout,temp);
147
148
  PSOCK_SEND_STR(&s->sout,("\"></td></tr>\<tr><td>DHCP:</td><td><input type=\"checkbox\" name=\"dhcp\" value=\"1\""));
149
150
  if(_enable_dhcp) 
151
     PSOCK_SEND_STR(&s->sout,("CHECKED"));
152
153
  PSOCK_SEND_STR(&s->sout,("/></td></tr>\<tr><td>IP:</td><td><input type=\"text\" name=\"ip\" size=\"15\" maxlength=\"15\" value=\""));
154
155
  snprintf(temp,sizeof(temp),("%d.%d.%d.%d"),
156
                               _ip_addr[0],_ip_addr[1],_ip_addr[2],_ip_addr[3]);
157
158
  PSOCK_SEND_STR(&s->sout,temp);
159
160
  PSOCK_SEND_STR(&s->sout,("\"></td></tr>\<tr><td>Netmask:</td><td><input type=\"text\" name=\"netmask\" size=\"15\" maxlength=\"15\" value=\""));
161
162
  snprintf(temp,sizeof(temp),("%d.%d.%d.%d"),
163
                               _net_mask[0],_net_mask[1],_net_mask[2],_net_mask[3]);
164
165
  PSOCK_SEND_STR(&s->sout,temp);
166
167
  PSOCK_SEND_STR(&s->sout,("\"/></td></tr>\<tr><td>Gateway:</td><td><input type=\"text\" name=\"gw\" size=\"15\" maxlength=\"15\" value=\""));
168
169
  snprintf(temp,sizeof(temp),("%d.%d.%d.%d"),
170
                              _gateway[0],_gateway[1],_gateway[2],_gateway[3]);
171
172
  PSOCK_SEND_STR(&s->sout,temp);
173
174
  PSOCK_SEND_STR(&s->sout,("\"/></td></tr>\<tr align=\"justify\"><td colspan=2><INPUT TYPE=submit VALUE=\"Submit\">  <INPUT TYPE=reset VALUE=\"Reset\"></td></tr>\</table></form>"));
175
176
  PSOCK_END(&s->sout);  
177
178
179
}

von Daniel A. (daniel-a)


Lesenswert?

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:
1
<!DOCTYPE html>
2
<html>
3
 <head>
4
   <title>ARM-Webserver</title>
5
  </head>
6
  <body>
7
    <h1>Network Settings</h1>
8
%! settings
9
  </body>
10
</html>

von andre (Gast)


Lesenswert?

Es sieht immernoch so wie beim 2.Bild aus

von Daniel A. (daniel-a)


Lesenswert?

Könntest du die Ausgabe des Servers für die beiden Requests hier 
hochladen?

So könnte man den ersten in eine Datei speichern:
1
curl -D /dev/stdout http://192.168.1.156/settings.shtml > request1.txt

von andre (Gast)


Lesenswert?

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

von Daniel A. (daniel-a)


Lesenswert?

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:
1
wget --save-headers --output-document request1.txt http://192.168.1.156/settings.shtml
http://gnuwin32.sourceforge.net/packages/wget.htm

von andre (Gast)


Lesenswert?

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 ??

von Daniel A. (daniel-a)


Lesenswert?

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.

von andre (Gast)


Lesenswert?

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

von Daniel A. (daniel-a)


Lesenswert?

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

von Stefan F. (Gast)


Lesenswert?

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.

von Michael U. (amiga)


Lesenswert?

Hallo,

die Folge der Daten stimmt doch in der Quelltextanzeige garnicht.
1
[html]
2
 [head]
3
 [/head]
4
 [body]
5
 ... Text
6
 ... Formular
7
 [/body]
8
[/html]

wäre doch richtig.

Gruß aus Berlin
Michael

von andre (Gast)


Angehängte Dateien:

Lesenswert?

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

1
static PT_THREAD(switch_time(struct httpd_state *s, char *ptr))
2
{    char ablage[15];
3
    char temp[30];
4
    static uint8_t i,j;
5
    static uint8_t result;
6
    uint8_t pcount;
7
8
  PSOCK_BEGIN(&s->sout);
9
10
  //check if there are parameters passed 
11
  if(s->filename[0] && (pcount=http_get_parameters_parse(s->filename,sizeof(s->filename)))>0)
12
   {
13
     i= 0;
14
     result=(pcount==4 || pcount==5 ); //correct number of parameters
15
    
16
     _enable_dhcp=0;
17
     
18
     //walk through parameters
19
    for(i=0;i<pcount;i++)
20
    {
21
       static char *pname,*pval;
22
      pname=http_get_parameter_name(s->filename,i,sizeof(s->filename));
23
      pval =http_get_parameter_value(s->filename,i,sizeof(s->filename));
24
25
      if(!strcmp(pname,("woh")) )
26
      {  
27
        result = decode_ip(pval,ablage);  
28
         for(j=0;j<3;j++)
29
          {
30
            switch_buffer[j] = ablage[j];
31
          }
32
      }
33
34
      else if(!strcmp(pname,("rea")) )
35
      {  
36
        _enable_dhcp=(pval[0]=='1');      
37
      }
38
      
39
      else if(!strcmp(pname,("sch")) )
40
      {  
41
         result = decode_ip(pval,ablage);     
42
43
         switch_buffer[4] = ablage[0];
44
         switch_buffer[5] = ablage[0];  
45
         switch_buffer[6] = ablage[0];
46
         switch_buffer[7] = ablage[0];      
47
      }
48
      
49
      else if(!strcmp(pname,("kiz")) )       
50
      {  
51
        result =  decode_ip(pval,ablage);
52
         switch_buffer[8] = ablage[0];
53
         switch_buffer[9] = ablage[0];  
54
         switch_buffer[10] = ablage[0];
55
         switch_buffer[11] = ablage[0];
56
      }
57
      
58
      else if(!strcmp(pname,("kue")) ) 
59
      {  
60
        result =  decode_ip(pval,ablage);
61
         switch_buffer[12] = ablage[0];
62
         switch_buffer[13] = ablage[0];  
63
         switch_buffer[14] = ablage[0];
64
         switch_buffer[15] = ablage[0];
65
      }
66
      
67
      else if(!strcmp(pname,("bal")) ) 
68
      {  
69
        result =  decode_ip(pval,ablage);
70
         switch_buffer[16] = ablage[0];
71
         switch_buffer[17] = ablage[0];  
72
         switch_buffer[18] = ablage[0];
73
         switch_buffer[19] = ablage[0];
74
      }
75
      
76
      else if(!strcmp(pname,("flu")) ) 
77
      {  
78
        result =  decode_ip(pval,ablage);
79
         switch_buffer[20] = ablage[0];
80
         switch_buffer[21] = ablage[0];  
81
         switch_buffer[22] = ablage[0];
82
         switch_buffer[23] = ablage[0];
83
      }      
84
      
85
      else
86
      {  
87
       result=0; //unknown parameter, probably an error!
88
      }
89
    }
90
91
    if(result) 
92
     {
93
        //PSOCK_SEND_STR(&s->sout,("Parameters Accepted, cycle power to make active!"));
94
95
  
96
 
97
98
99
     }
100
     
101
     else 
102
     {
103
      //PSOCK_SEND_STR(&s->sout,("Parameters incorrect!"));
104
     }
105
  }
106
 
107
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=\""));
108
109
  snprintf(temp,sizeof(temp),("%02d.%02d BIS %02d.%02d"),
110
                              switch_buffer[0],switch_buffer[1],switch_buffer[2],switch_buffer[3]);
111
112
  PSOCK_SEND_STR(&s->sout,temp);
113
114
  PSOCK_SEND_STR(&s->sout,("\"></td></tr>\<tr><td>READY:</td><td><input type=\"checkbox\" name=\"rea\" value=\"1\""));
115
116
  if(_enable_dhcp) 
117
     PSOCK_SEND_STR(&s->sout,("CHECKED"));
118
119
  PSOCK_SEND_STR(&s->sout,("/></td></tr>\<tr><td>SCHLAFZIMMER:</td><td><input type=\"text\" name=\"sch\" size=\"15\" maxlength=\"15\" value=\""));
120
121
   snprintf(temp,sizeof(temp),("%02d.%02d BIS %02d.%02d"),
122
                                switch_buffer[4],switch_buffer[5],switch_buffer[6],switch_buffer[7]);
123
124
  PSOCK_SEND_STR(&s->sout,temp);
125
126
  PSOCK_SEND_STR(&s->sout,("\"></td></tr>\<tr><td>KINDERZIMMER:</td><td><input type=\"text\" name=\"kiz\" size=\"15\" maxlength=\"15\" value=\""));
127
128
   snprintf(temp,sizeof(temp),("%02d.%02d BIS %02d.%02d"),
129
                                switch_buffer[8],switch_buffer[9],switch_buffer[10],switch_buffer[11]);
130
131
  PSOCK_SEND_STR(&s->sout,temp);
132
133
 
134
  PSOCK_SEND_STR(&s->sout,("\"></td></tr>\<tr><td>KUECHE:</td><td><input type=\"text\" name=\"kiz\" size=\"15\" maxlength=\"15\" value=\""));
135
136
   snprintf(temp,sizeof(temp),("%02d.%02d BIS %02d.%02d"),
137
                                switch_buffer[12],switch_buffer[13],switch_buffer[14],switch_buffer[15]);
138
139
  PSOCK_SEND_STR(&s->sout,temp);
140
141
142
  PSOCK_SEND_STR(&s->sout,("\"></td></tr>\<tr><td>BALKON:</td><td><input type=\"text\" name=\"bal\" size=\"15\" maxlength=\"15\" value=\""));
143
144
   snprintf(temp,sizeof(temp),("%02d.%02d BIS %02d.%02d"),
145
                                switch_buffer[16],switch_buffer[17],switch_buffer[18],switch_buffer[19]);
146
147
  PSOCK_SEND_STR(&s->sout,temp);   
148
   
149
   
150
   PSOCK_SEND_STR(&s->sout,("\"/></td></tr>\<tr><td>FLUR:</td><td><input type=\"text\" name=\"flu\" size=\"15\" maxlength=\"15\" value=\""));
151
152
   snprintf(temp,sizeof(temp),("%02d.%02d BIS %02d.%02d"),
153
                                switch_buffer[20],switch_buffer[21],switch_buffer[22],switch_buffer[23]);
154
155
  PSOCK_SEND_STR(&s->sout,temp);
156
157
158
159
160
   PSOCK_SEND_STR(&s->sout,("\"/></td></tr>\<tr align=\"justify\"><td colspan=2><INPUT TYPE=submit VALUE=\"Submit\">  <INPUT TYPE=reset VALUE=\"Reset\"></td></tr>\</table></form>"));
161
   
162
  
163
  
164
 PSOCK_END(&s->sout);

von Stefan F. (Gast)


Lesenswert?

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.

von andre (Gast)


Lesenswert?

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

von andre (Gast)


Lesenswert?

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

von Marcel (Gast)


Lesenswert?

Hallo Andre,

du verwechselst hier den HTML-Header mit den HTTP-Headern.
Lese dir einmal folgende beiden Seiten durch; dann sollte dir klar sein, 
warum das so nicht funktioniert:
https://de.wikipedia.org/wiki/Hypertext_Transfer_Protocol
https://de.wikipedia.org/wiki/Liste_der_HTTP-Headerfelder

Viele Grüße,
Marcel

von Daniel A. (daniel-a)


Lesenswert?


von andre (Gast)


Lesenswert?

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

von Michael U. (amiga)


Lesenswert?

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

von andre (Gast)


Lesenswert?

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

von Stefan F. (Gast)


Lesenswert?

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?

von andre (Gast)


Lesenswert?

Das funktioniert einwandfrei .


static unsigned short
generate_tcp_stats(void *arg)
{
  struct uip_conn *conn;
  struct httpd_state *s = (struct httpd_state *)arg;

  conn = &uip_conns[s->count];
  return snprintf((char *)uip_appdata, UIP_APPDATA_SIZE,
     "<tr><td>%d</td><td>%u.%u.%u.%u:%u</td><td>%s</td><td>%u</td><td>%u</td> 
<td>%c  %c</td></tr>\r\n",
     htons(conn->lport),
     htons(conn->ripaddr[0]) >> 8,
     htons(conn->ripaddr[0]) & 0xff,
     htons(conn->ripaddr[1]) >> 8,
     htons(conn->ripaddr[1]) & 0xff,
     htons(conn->rport),
     states[conn->tcpstateflags & UIP_TS_MASK],
     conn->nrtx,
     conn->timer,
     (uip_outstanding(conn))? '*':' ',
     (uip_stopped(conn))? '!':' ');
}
/*---------------------------------------------------------------------- 
-----*/
static
PT_THREAD(tcp_stats(struct httpd_state *s, char *ptr))
{

  PSOCK_BEGIN(&s->sout);

  for(s->count = 0; s->count < UIP_CONNS; ++s->count) {
    if((uip_conns[s->count].tcpstateflags & UIP_TS_MASK) != UIP_CLOSED) 
{
      PSOCK_GENERATOR_SEND(&s->sout, generate_tcp_stats, s);
    }
  }

  PSOCK_END(&s->sout);
}

von andre (Gast)


Lesenswert?

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.

von Daniel A. (daniel-a)


Lesenswert?

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?

: Bearbeitet durch User
von andre (Gast)


Lesenswert?

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.

von Stefan F. (Gast)


Lesenswert?

>>> 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!

von andre (Gast)


Angehängte Dateien:

Lesenswert?

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.

von andre (Gast)


Angehängte Dateien:

Lesenswert?

anbei noch die Response header

von Daniel A. (daniel-a)


Lesenswert?

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.

von andre (Gast)


Angehängte Dateien:

Lesenswert?

Das kommt nach dem Submid button drücken

von Floppy (Gast)


Lesenswert?

könnte es eventuell probleme durch die Fireall verursachen?
Die Pakete die du bekommen solltest werden als File interpretiert.

von Marcel (Gast)


Lesenswert?

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

von Daniel A. (daniel-a)


Lesenswert?

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?

von andre (Gast)


Lesenswert?

im code habe ich nichts weiter geändert.

nur das HTML was im Anhang war.

von Stefan F. (Gast)


Angehängte Dateien:

Lesenswert?

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?

von Stefan F. (Gast)


Angehängte Dateien:

Lesenswert?

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.

von andre (Gast)


Lesenswert?

Hallo,
mit Netcat hab ich noch nicht grarbeitet.

wo kommt denn der HTTP header hin bevor ich das erste PSOCK_SEND_STR 
richtig oder.

von Stefan F. (Gast)


Lesenswert?

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?

von andre (Gast)


Lesenswert?

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.

von andre (Gast)


Lesenswert?

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?



1
PSOCK_SEND_STR(&s->sout,("<HTTP/1.1 200 OK\r\nContent-Type:text/html\r\nConnection:close\r\n\r\n<html><body>/body></html>"));
2
  
3
   PSOCK_SEND_STR(&s->sout,("\<form action=\"/switch.shtml\" method=\"get\" bgcolor=\"#808080\">\<table>\<tr><td>WOHNZIMMER:</td><td><input type=\"text\" name=\"woh\" size=\"15\" maxlength=\"18\" value=\""));
4
5
   snprintf(temp,sizeof(temp),("%0d.%0d BIS %0d.%0d"),
6
                              switch_buffer[0],switch_buffer[1],switch_buffer[2],switch_buffer[3]);
7
8
   PSOCK_SEND_STR(&s->sout,temp);
9
10
   PSOCK_SEND_STR(&s->sout,("\"></td></tr>\<tr><td>SCHLAFZIMMER:</td><td><input type=\"text\" name=\"sch\" size=\"15\" maxlength=\"15\" value=\""));
11
12
   snprintf(temp,sizeof(temp),("%02d.%02d BIS %02d.%02d"),
13
                                switch_buffer[4],switch_buffer[5],switch_buffer[6],switch_buffer[7]);
14
15
   PSOCK_SEND_STR(&s->sout,temp);
16
17
   PSOCK_SEND_STR(&s->sout,("\"></td></tr>\<tr><td>KINDERZIMMER:</td><td><input type=\"text\" name=\"kiz\" size=\"15\" maxlength=\"15\" value=\""));
18
19
   snprintf(temp,sizeof(temp),("%02d.%02d BIS %02d.%02d"),
20
                                switch_buffer[8],switch_buffer[9],switch_buffer[10],switch_buffer[11]);
21
22
   PSOCK_SEND_STR(&s->sout,temp);
23
24
   PSOCK_SEND_STR(&s->sout,("\"/></td></tr>\<tr><td>KUECHE:</td><td><input type=\"text\" name=\"kue\" size=\"15\" maxlength=\"15\" value=\""));
25
26
   snprintf(temp,sizeof(temp),("%02d.%02d BIS %02d.%02d"),
27
                                switch_buffer[12],switch_buffer[13],switch_buffer[14],switch_buffer[15]);
28
29
   PSOCK_SEND_STR(&s->sout,temp);
30
31
   PSOCK_SEND_STR(&s->sout,("\"/></td></tr>\<tr><td>BALKON:</td><td><input type=\"text\" name=\"bal\" size=\"15\" maxlength=\"15\" value=\""));
32
33
   snprintf(temp,sizeof(temp),("%02d.%02d BIS %02d.%02d"),
34
                                switch_buffer[16],switch_buffer[17],switch_buffer[18],switch_buffer[19]);
35
36
   PSOCK_SEND_STR(&s->sout,temp);  
37
  
38
   PSOCK_SEND_STR(&s->sout,("\"/></td></tr>\<tr><td>FLUR:</td><td><input type=\"text\" name=\"flu\" size=\"15\" maxlength=\"15\" value=\""));
39
40
   snprintf(temp,sizeof(temp),("%02d.%02d BIS %02d.%02d"),
41
   switch_buffer[20],switch_buffer[21],switch_buffer[22],switch_buffer[23]);
42
43
   PSOCK_SEND_STR(&s->sout,temp);   
44
  
45
   PSOCK_SEND_STR(&s->sout,("\"/></td></tr>\<tr align=\"justify\"><td colspan=2><INPUT TYPE=submit VALUE=\"Submit\">  <INPUT TYPE=reset VALUE=\"Reset\"></td></tr>\</table></form>"));
46
   PSOCK_END(&s->sout);

von Daniel A. (daniel-a)


Lesenswert?

andre schrieb:
> PSOCK_SEND_STR(&s->sout,("<HTTP/1.1

Das '<' gehört da nicht hin.

von andre (Gast)


Lesenswert?

Daniel A. schrieb:
> andre schrieb:
>> PSOCK_SEND_STR(&s->sout,("<HTTP/1.1
>
> Das '<' gehört da nicht hin.

Es komm trotzdem der Download.

von Stefan F. (Gast)


Lesenswert?

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.

von andre (Gast)


Lesenswert?

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

von Stefan F. (Gast)


Lesenswert?

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.

von Stefan F. (Gast)


Lesenswert?

> 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.

von andre (Gast)


Lesenswert?

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

von Stefan F. (Gast)


Lesenswert?

> 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.

von andre (Gast)


Lesenswert?

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
1
  // send a standard http response header 
2
  PSOCK_BEGIN(&s->sout);
3
  PSOCK_SEND_STR(&s->sout,("HTTP/1.1 200 OK\r\n"));
4
  PSOCK_SEND_STR(&s->sout,("Content-Type: text/html\r\n"));   
5
  PSOCK_SEND_STR(&s->sout,("Connection: close"));     
6
  PSOCK_SEND_STR(&s->sout,("\r\n"));     
7
  
8
  // send web page 
9
  PSOCK_SEND_STR(&s->sout,("<!DOCTYPE html>"));
10
  PSOCK_SEND_STR(&s->sout,("<html>"));   
11
  PSOCK_SEND_STR(&s->sout,("<head>"));     
12
  PSOCK_SEND_STR(&s->sout,("<title>Arduino LED Control</title>"));   
13
  PSOCK_SEND_STR(&s->sout,("<body>"));
14
  PSOCK_SEND_STR(&s->sout,("<html>"));   
15
  PSOCK_SEND_STR(&s->sout,("<head>"));     
16
  
17
  
18
  
19
20
   
21
   PSOCK_SEND_STR(&s->sout,("\<form action=\"/switch.shtml\" method=\"get\" bgcolor=\"#808080\">\<table>\<tr><td>WOHNZIMMER:</td><td><input type=\"text\" name=\"woh\" size=\"15\" maxlength=\"18\" value=\""));
22
23
   snprintf(temp,sizeof(temp),("%0d.%0d BIS %0d.%0d"),
24
                              switch_buffer[0],switch_buffer[1],switch_buffer[2],switch_buffer[3]);
25
26
   PSOCK_SEND_STR(&s->sout,temp);
27
28
   PSOCK_SEND_STR(&s->sout,("\"></td></tr>\<tr><td>SCHLAFZIMMER:</td><td><input type=\"text\" name=\"sch\" size=\"15\" maxlength=\"15\" value=\""));
29
30
   snprintf(temp,sizeof(temp),("%02d.%02d BIS %02d.%02d"),
31
                                switch_buffer[4],switch_buffer[5],switch_buffer[6],switch_buffer[7]);
32
33
   PSOCK_SEND_STR(&s->sout,temp);
34
35
   PSOCK_SEND_STR(&s->sout,("\"></td></tr>\<tr><td>KINDERZIMMER:</td><td><input type=\"text\" name=\"kiz\" size=\"15\" maxlength=\"15\" value=\""));
36
37
   snprintf(temp,sizeof(temp),("%02d.%02d BIS %02d.%02d"),
38
                                switch_buffer[8],switch_buffer[9],switch_buffer[10],switch_buffer[11]);
39
40
   PSOCK_SEND_STR(&s->sout,temp);
41
42
   PSOCK_SEND_STR(&s->sout,("\"/></td></tr>\<tr><td>KUECHE:</td><td><input type=\"text\" name=\"kue\" size=\"15\" maxlength=\"15\" value=\""));
43
44
   snprintf(temp,sizeof(temp),("%02d.%02d BIS %02d.%02d"),
45
                                switch_buffer[12],switch_buffer[13],switch_buffer[14],switch_buffer[15]);
46
47
   PSOCK_SEND_STR(&s->sout,temp);
48
49
   PSOCK_SEND_STR(&s->sout,("\"/></td></tr>\<tr><td>BALKON:</td><td><input type=\"text\" name=\"bal\" size=\"15\" maxlength=\"15\" value=\""));
50
51
   snprintf(temp,sizeof(temp),("%02d.%02d BIS %02d.%02d"),
52
                                switch_buffer[16],switch_buffer[17],switch_buffer[18],switch_buffer[19]);
53
54
   PSOCK_SEND_STR(&s->sout,temp);  
55
  
56
   PSOCK_SEND_STR(&s->sout,("\"/></td></tr>\<tr><td>FLUR:</td><td><input type=\"text\" name=\"flu\" size=\"15\" maxlength=\"15\" value=\""));
57
58
   snprintf(temp,sizeof(temp),("%02d.%02d BIS %02d.%02d"),
59
   switch_buffer[20],switch_buffer[21],switch_buffer[22],switch_buffer[23]);
60
61
   PSOCK_SEND_STR(&s->sout,temp);   
62
  
63
   PSOCK_SEND_STR(&s->sout,("\"/></td></tr>\<tr align=\"justify\"><td colspan=2><INPUT TYPE=submit VALUE=\"Submit\">  <INPUT TYPE=reset VALUE=\"Reset\"></td></tr>\</table></form>"));
64
   PSOCK_END(&s->sout);

von Stefan F. (Gast)


Lesenswert?

Es fehlt die Leerzeile zwischen HTTP Header und HTML Header.

von andre (Gast)


Angehängte Dateien:

Lesenswert?

Was mch ich Falsch das Seite nicht Angezeigt wird.


1
  // send a standard http response header 
2
  PSOCK_BEGIN(&s->sout);
3
  PSOCK_SEND_STR(&s->sout,("HTTP/1.1 200 OK\r\n"));
4
  PSOCK_SEND_STR(&s->sout,("Content-Type:text/html\r\n"));   
5
  PSOCK_SEND_STR(&s->sout,("Connection:close\r\n\r\n"));     
6
  //PSOCK_SEND_STR(&s->sout,("\r\n\r\n"));     
7
  
8
  // send web page 
9
  PSOCK_SEND_STR(&s->sout,("<!DOCTYPE html>"));
10
  PSOCK_SEND_STR(&s->sout,("<html>"));   
11
  PSOCK_SEND_STR(&s->sout,("<head>"));     
12
  PSOCK_SEND_STR(&s->sout,("<title>HOMING</title>"));   
13
  PSOCK_SEND_STR(&s->sout,("<body>"));
14
  PSOCK_SEND_STR(&s->sout,("<html>"));   
15
  PSOCK_SEND_STR(&s->sout,("<head>"));     
16
  
17
  
18
  
19
20
   
21
   PSOCK_SEND_STR(&s->sout,("\<form action=\"/switch.shtml\" method=\"get\" bgcolor=\"#808080\">\<table>\<tr><td>WOHNZIMMER:</td><td><input type=\"text\" name=\"woh\" size=\"15\" maxlength=\"18\" value=\""));
22
23
   snprintf(temp,sizeof(temp),("%0d.%0d BIS %0d.%0d"),
24
                              switch_buffer[0],switch_buffer[1],switch_buffer[2],switch_buffer[3]);
25
26
   PSOCK_SEND_STR(&s->sout,temp);
27
28
   PSOCK_SEND_STR(&s->sout,("\"></td></tr>\<tr><td>SCHLAFZIMMER:</td><td><input type=\"text\" name=\"sch\" size=\"15\" maxlength=\"15\" value=\""));
29
30
   snprintf(temp,sizeof(temp),("%02d.%02d BIS %02d.%02d"),
31
                                switch_buffer[4],switch_buffer[5],switch_buffer[6],switch_buffer[7]);
32
33
   PSOCK_SEND_STR(&s->sout,temp);
34
35
   PSOCK_SEND_STR(&s->sout,("\"></td></tr>\<tr><td>KINDERZIMMER:</td><td><input type=\"text\" name=\"kiz\" size=\"15\" maxlength=\"15\" value=\""));
36
37
   snprintf(temp,sizeof(temp),("%02d.%02d BIS %02d.%02d"),
38
                                switch_buffer[8],switch_buffer[9],switch_buffer[10],switch_buffer[11]);
39
40
   PSOCK_SEND_STR(&s->sout,temp);
41
42
   PSOCK_SEND_STR(&s->sout,("\"/></td></tr>\<tr><td>KUECHE:</td><td><input type=\"text\" name=\"kue\" size=\"15\" maxlength=\"15\" value=\""));
43
44
   snprintf(temp,sizeof(temp),("%02d.%02d BIS %02d.%02d"),
45
                                switch_buffer[12],switch_buffer[13],switch_buffer[14],switch_buffer[15]);
46
47
   PSOCK_SEND_STR(&s->sout,temp);
48
49
   PSOCK_SEND_STR(&s->sout,("\"/></td></tr>\<tr><td>BALKON:</td><td><input type=\"text\" name=\"bal\" size=\"15\" maxlength=\"15\" value=\""));
50
51
   snprintf(temp,sizeof(temp),("%02d.%02d BIS %02d.%02d"),
52
                                switch_buffer[16],switch_buffer[17],switch_buffer[18],switch_buffer[19]);
53
54
   PSOCK_SEND_STR(&s->sout,temp);  
55
  
56
   PSOCK_SEND_STR(&s->sout,("\"/></td></tr>\<tr><td>FLUR:</td><td><input type=\"text\" name=\"flu\" size=\"15\" maxlength=\"15\" value=\""));
57
58
   snprintf(temp,sizeof(temp),("%02d.%02d BIS %02d.%02d"),
59
   switch_buffer[20],switch_buffer[21],switch_buffer[22],switch_buffer[23]);
60
61
   PSOCK_SEND_STR(&s->sout,temp);   
62
  
63
   PSOCK_SEND_STR(&s->sout,("\"/></td></tr>\<tr align=\"justify\"><td colspan=2><INPUT TYPE=submit VALUE=\"Submit\">  <INPUT TYPE=reset VALUE=\"Reset\"></td></tr>\</table></form>"));
64
   PSOCK_END(&s->sout);

von Stefan F. (Gast)


Lesenswert?

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.

von andre (Gast)


Lesenswert?

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.

von Marcel (Gast)


Lesenswert?

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

von andre (Gast)


Lesenswert?

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.

von Daniel A. (daniel-a)


Lesenswert?

@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.

von Stefan F. (Gast)


Lesenswert?

> 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.

von Stefan F. (Gast)


Lesenswert?

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
      <input type="text" name="feld" value="Hallo">
11
      <input type="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.

von andre (Gast)


Angehängte Dateien:

Lesenswert?

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
1
  // send a standard http response header 
2
  PSOCK_BEGIN(&s->sout);
3
  PSOCK_SEND_STR(&s->sout,("HTTP/1.1 200 OK\r\n"));
4
  PSOCK_SEND_STR(&s->sout,("Content-Type:text/html\r\n"));   
5
  PSOCK_SEND_STR(&s->sout,("Connection:close\r\n"));     
6
  PSOCK_SEND_STR(&s->sout,("\r\n\r\n"));     
7
  
8
   /*
9
  // send web page 
10
  PSOCK_SEND_STR(&s->sout,("<!DOCTYPE html>"));
11
  PSOCK_SEND_STR(&s->sout,("<html>"));   
12
  PSOCK_SEND_STR(&s->sout,("<head>"));     
13
  PSOCK_SEND_STR(&s->sout,("<title>HOMING</title>"));   
14
  PSOCK_SEND_STR(&s->sout,("<body>"));
15
  PSOCK_SEND_STR(&s->sout,("<html>"));   
16
  PSOCK_SEND_STR(&s->sout,("<head>"));     
17
  
18
  */
19
  
20
21
   
22
   PSOCK_SEND_STR(&s->sout,("\<form action=\"/switch.shtml\" method=\"get\" bgcolor=\"#808080\">\<table>\<tr><td>WOHNZIMMER:</td><td><input type=\"text\" name=\"woh\" size=\"15\" maxlength=\"18\" value=\""));
23
24
   snprintf(temp,sizeof(temp),("%0d.%0d BIS %0d.%0d"),
25
                              switch_buffer[0],switch_buffer[1],switch_buffer[2],switch_buffer[3]);
26
27
   PSOCK_SEND_STR(&s->sout,temp);
28
29
   PSOCK_SEND_STR(&s->sout,("\"></td></tr>\<tr><td>SCHLAFZIMMER:</td><td><input type=\"text\" name=\"sch\" size=\"15\" maxlength=\"15\" value=\""));
30
31
   snprintf(temp,sizeof(temp),("%02d.%02d BIS %02d.%02d"),
32
                                switch_buffer[4],switch_buffer[5],switch_buffer[6],switch_buffer[7]);
33
34
   PSOCK_SEND_STR(&s->sout,temp);
35
36
   PSOCK_SEND_STR(&s->sout,("\"></td></tr>\<tr><td>KINDERZIMMER:</td><td><input type=\"text\" name=\"kiz\" size=\"15\" maxlength=\"15\" value=\""));
37
38
   snprintf(temp,sizeof(temp),("%02d.%02d BIS %02d.%02d"),
39
                                switch_buffer[8],switch_buffer[9],switch_buffer[10],switch_buffer[11]);
40
41
   PSOCK_SEND_STR(&s->sout,temp);
42
43
   PSOCK_SEND_STR(&s->sout,("\"/></td></tr>\<tr><td>KUECHE:</td><td><input type=\"text\" name=\"kue\" size=\"15\" maxlength=\"15\" value=\""));
44
45
   snprintf(temp,sizeof(temp),("%02d.%02d BIS %02d.%02d"),
46
                                switch_buffer[12],switch_buffer[13],switch_buffer[14],switch_buffer[15]);
47
48
   PSOCK_SEND_STR(&s->sout,temp);
49
50
   PSOCK_SEND_STR(&s->sout,("\"/></td></tr>\<tr><td>BALKON:</td><td><input type=\"text\" name=\"bal\" size=\"15\" maxlength=\"15\" value=\""));
51
52
   snprintf(temp,sizeof(temp),("%02d.%02d BIS %02d.%02d"),
53
                                switch_buffer[16],switch_buffer[17],switch_buffer[18],switch_buffer[19]);
54
55
   PSOCK_SEND_STR(&s->sout,temp);  
56
  
57
   PSOCK_SEND_STR(&s->sout,("\"/></td></tr>\<tr><td>FLUR:</td><td><input type=\"text\" name=\"flu\" size=\"15\" maxlength=\"15\" value=\""));
58
59
   snprintf(temp,sizeof(temp),("%02d.%02d BIS %02d.%02d"),
60
   switch_buffer[20],switch_buffer[21],switch_buffer[22],switch_buffer[23]);
61
62
   PSOCK_SEND_STR(&s->sout,temp);   
63
  
64
   PSOCK_SEND_STR(&s->sout,("\"/></td></tr>\<tr align=\"justify\"><td colspan=2><INPUT TYPE=submit VALUE=\"Submit\">  <INPUT TYPE=reset VALUE=\"Reset\"></td></tr>\</table></form>"));
65
   PSOCK_END(&s->sout);

von Stefan F. (Gast)


Lesenswert?

> 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.

von andre (Gast)


Lesenswert?

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.

von Jim M. (turboj)


Lesenswert?

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.

von Sascha W. (sascha-w)


Lesenswert?

@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

von Stefan F. (Gast)


Lesenswert?

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.

von andre (Gast)


Lesenswert?

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.

von Stefan F. (Gast)


Lesenswert?

> ich habs mal mit dem Internet Explorer probiert und da >
> gehts einwandfrei.

Welchen Schluss ziehst du daraus?

von andre (Gast)


Lesenswert?

Stefan U. schrieb:
> ich habs mal mit dem Internet Explorer probiert und da >
> gehts einwandfrei.
>
> Welchen Schluss ziehst du daraus?

???

von Stefan F. (Gast)


Lesenswert?

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.

von andre (Gast)


Lesenswert?

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

von Stefan F. (Gast)


Lesenswert?

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.

von andre (Gast)


Lesenswert?

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.


1
   PSOCK_SEND_STR(&s->sout,("\<form action=\"/switch.shtml\" method=\"get\" bgcolor=\"#808080\">\<table>\<tr><td>WOHNZIMMER:</td><td><input type=\"text\" name=\"woh\" size=\"15\" maxlength=\"15\" value=\""));
2
  
3
   snprintf(temp,sizeof(temp),("%02d:%02d BIS %02d:%02d"),
4
                             switch_buffer[0],switch_buffer[1],switch_buffer[2],switch_buffer[3]);        
5
6
   PSOCK_SEND_STR(&s->sout,(temp));
7
 
8
   PSOCK_SEND_STR(&s->sout,("\"></td></tr>\<tr><td>SCHLAFZIMMER</td><td><input type=\"text\" name=\"sch\" size=\"15\" maxlength=\"15\" value=\""));
9
10
   snprintf(temp,sizeof(temp),("%02d:%02d BIS %02d:%02d"),
11
                                switch_buffer[4],switch_buffer[5],switch_buffer[6],switch_buffer[7]);
12
13
   PSOCK_SEND_STR(&s->sout,temp);
14
15
   PSOCK_SEND_STR(&s->sout,("\"></td></tr>\<tr><td>KINDERZIMMER</td><td><input type=\"text\" name=\"kiz\" size=\"15\" maxlength=\"15\" value=\""));
16
  
17
   snprintf(temp,sizeof(temp),("%02d:%02d BIS %02d:%02d"),
18
                              switch_buffer[8],switch_buffer[9],switch_buffer[10],switch_buffer[11]);
19
20
   PSOCK_SEND_STR(&s->sout,temp);
21
22
23
   PSOCK_SEND_STR(&s->sout,("\"/></td></tr>\<tr><td>KUECHE</td><td><input type=\"text\" name=\"kue\" size=\"15\" maxlength=\"15\" value=\""));
24
25
   snprintf(temp,sizeof(temp),("%02d:%02d BIS %02d:%02d"),
26
                                switch_buffer[12],switch_buffer[13],switch_buffer[14],switch_buffer[15]);
27
   PSOCK_SEND_STR(&s->sout,temp);
28
29
30
31
   PSOCK_SEND_STR(&s->sout,("\"/></td></tr>\<tr><td>BALKON</td><td><input type=\"text\" name=\"bal\" size=\"15\" maxlength=\"15\" value=\""));
32
33
   sprintf(temp,"%02d:%02d BIS %02d:%02d",
34
                                switch_buffer[16],switch_buffer[17],switch_buffer[18],switch_buffer[19]);
35
   PSOCK_SEND_STR(&s->sout,temp);
36
37
  
38
   PSOCK_SEND_STR(&s->sout,("\"/></td></tr>\<tr><td>FLUR</td><td><input type=\"text\" name=\"flu\" size=\"15\" maxlength=\"15\" value=\""));
39
40
   sprintf(temp,"%02d:%02d B %02d:%02d",
41
   switch_buffer[20],switch_buffer[21],switch_buffer[22],switch_buffer[23]);
42
43
   PSOCK_SEND_STR(&s->sout,temp);   
44
  
45
   PSOCK_SEND_STR(&s->sout,("\"/></td></tr>\<tr align=\"justify\"><td colspan=2><INPUT TYPE=submit class=kse VALUE=\"Submit\"><INPUT TYPE=reset class=kse VALUE=\"Reset\"></td></tr>\</table></form></br>"));
46
47
    PSOCK_END(&s->sout);

von Stefan F. (Gast)


Lesenswert?

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

von Karl Käfer (Gast)


Lesenswert?

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:
1
HTTP 200 Ok\r\n
2
Content-type: text/html\r\n
3
Connection: close\r\n
4
\r\n

HTH,
Karl

von Karl Käfer (Gast)


Lesenswert?

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
1
PSOCK_SEND_STR(&s->sout,("\<form action=\"/switch.shtml\"

und
1
PSOCK_SEND_STR(&s->sout,("\"/></td></tr>\<tr align=\"justify\"><td colspan=2><INPUT TYPE=submit

einfach mal wegzulassen. Dieser Teil ist nämlich ganz offensichtlich 
nicht Dein Problem, sondern der Code DAVOR.

von andre (Gast)


Lesenswert?

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

von Daniel A. (daniel-a)


Lesenswert?

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.

von andre (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Stefan F. (Gast)


Lesenswert?

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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Dimitri schrieb im Beitrag #4557005:
> Ich möchte hier keinem zu nahe treten, aber der Thread ersteller
... sollte laut der sehr kompakten Nutzungsbedingungen nur mit 1 Namen 
pro Thread posten!

https://www.mikrocontroller.net/articles/Hilfe:Forum_Nutzungsbedingungen

: Bearbeitet durch Moderator
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
Noch kein Account? Hier anmelden.