Stránka 2 z 3

Napsal: 02 úno 2015, 21:49
od jiri255
ano, když tam dopíšu "test" a kliknu na tlačítko, tak se mi vrátí:
GET /?test HTTP/1.1

Napsal: 02 úno 2015, 21:51
od berk
Ok, super

Když přistupuješ na server tak zadáš v prohlížeči pravěpodobně toto:

Kód: Vybrat vše

http://192.168.0.88
tj požaduješ defaultní stránku / a požadavek je tedy

Kód: Vybrat vše

GET / HTTP/1.1 

Na tlačítku máš ale následující odkaz

Kód: Vybrat vše

<a href='http://192.168.0.88?'><button style='backgrou ...
pošleš tedy požadavek na /?

Kód: Vybrat vše

GET /? HTTP/1.1 
Lepší by asi byl odkaz

Kód: Vybrat vše

<a href='http://192.168.0.88/page1.htm'><button style='backgrou ...
a dostal bys požadavek:

Kód: Vybrat vše

GET /page1.htm HTTP/1.1 
Zvládneš na základě toho řídit co klientovi odpovíš?

Napsal: 02 úno 2015, 22:01
od rnbw
Neodporucam robit vlastnu implementaciu HTTP servera, hlavne ked tomu nerozumies. Ak to nebude splnat patricne RFC, tak s tym budu problemy.

Napsal: 02 úno 2015, 22:07
od jiri255
jj, když přistupuju zadám http://192.168.0.88 a ten odkaz na tlačítku to byl experiment :( to jsem zkoušel všechno možné, abych s toho dostal novou prázdnou stránku do, které bych si vecpal různá tlačítka a funkce, tedy použil funkční části kódu, které mám.
A ne nedokážu si na základě toho doplnit do toho kódu kus funkce, která by mi zobrazila tu prázdnou stránku :(

Napsal: 02 úno 2015, 22:10
od berk
Ok, malá nápověda

Kód: Vybrat vše

#include <stdio.h>

#define BUFFLEN 1024
int main(void)
{
        char get[] = "GET /page1.htm HTTP/1.1 ";
        char s[BUFFLEN];
        
        sscanf(get, "GET %s HTTP", s);
        printf("chci stranku %s\n", s);
        
        if (!strcmp(s, "/page1.htm")) {
                printf("poslu stranku 1\n");
        } else if (!strcmp(s, "/page2.htm")) {
                printf("poslu stranku 2\n");
        } else {
                printf("poslu defaultni stranku\n");
        } 
        
        return 0;
}
Neodporucam robit vlastnu implementaciu HTTP servera, hlavne ked tomu nerozumies. Ak to nebude splnat patricne RFC, tak s tym budu problemy.
Předpokádám že je to jen experimentování a nepůjde to do produkce :-)

Napsal: 02 úno 2015, 22:21
od jiri255
není to komerční, je to pro moje účely ....musím si sehnat tu knihovnu stdio.h tu nemám a pak zkusím nějak odzkoušet to nacpat do toho kódu výše, snad se zadaří.
Zítra odzkouším a dám vědět, jak jsem dopadl... zatím moc děkuji za pomoc a rady

Napsal: 03 úno 2015, 10:24
od Jeejda_teda_puvodne

Napsal: 03 úno 2015, 19:09
od berk
Přesně tak, je to v ANSI C.

Arduino nemám, takže pokud to někdo napíše ve správné formě bude to fajn. :-)

Napsal: 03 úno 2015, 19:44
od jiri255
jj mohu potvrdit, že kontrola programu proběhne ok i se to nahraje do arduina, ale stránka http://192.168.0.88 se nenačte... neběží to a takhle to vypadá, když jsem to tam vložil tu část v C, no kdyby to uměl někdo opravit :(

Kód: Vybrat vše

#include <SPI.h>
#include <Ethernet.h>
#include <stdio.h>

// zde si upravte podle sebe
byte mac[] = { 0xD4, 0xAD, 0xBE, 0xEF, 0xFE, 0x7D };

// IP adresa
IPAddress ip(192,168,0, 88);

// port
EthernetServer server(80);
 

 #define BUFFLEN 1024 
 int main(void) 
 { 
         char get[] = "GET /page1.htm HTTP/1.1 "; 
         char s[BUFFLEN]; 
         
         sscanf(get, "GET %s HTTP", s); 
         printf("chci stranku %s\n", s); 
         
         if (!strcmp(s, "/page1.htm")) { 
                 printf("poslu stranku 1\n"); 
         } else if (!strcmp(s, "/page2.htm")) { 
                 printf("poslu stranku 2\n"); 
         } else { 
                 printf("poslu defaultni stranku\n"); 
         } 
         
         return 0; 
 }

void setup()
{
  Serial.begin(9600);
  // inicalizace sítě
  Ethernet.begin(mac, ip);

  // inicializace serveru
  server.begin();

}

void loop()
{

  // když je připojen klient, zjistíme, zda jsou odeslána data
  // od klienta směrem k nám
   EthernetClient client = server.available();

  // dokud je klient připojen 
   while (client.connected()) {

    // čti data od něj dokud nenarazíš na znak nového řádku 
     if (client.available()) {
        char c = client.read();
          Serial.print(c);
         if (c == '\n') {
        
            
           // odešle klasickou hlavičku HTML stránky
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");
          client.println();
          client.println("<!DOCTYPE HTML>");
          
          // zde již klasická html data
          client.println("<html>");
          client.println("<head>");

          // Název stránky
          client.println("<title>Arduinio Server</title>");
          client.println("</head>");
          client.println("<body>");

          // vypíše text 
          client.println("<a href='http://192.168.0.88?page1'><button style='background:red;width:20%;height:30px'>Nova stranka</button></a>");         
          client.println("</body>");
          client.println("</html>");
          //ukončí přenos
          client.stop();
                     }
                }
        }
}

Napsal: 03 úno 2015, 20:47
od MiloPS3
no protoze asi vubec netusis co to dela a netusis jak beha ten program v arduinu, vsechno se odehrava v LOOPu a musis to dat tam , potom co dostanes kompletni odpoved aby si ji moh vyhodnotit..

Napsal: 03 úno 2015, 21:33
od jiri255
je to "int main(void)" a něco podobného v některých programech, které jsem testoval v loop vůbec není, volá si ho funkce spuštěná v loop, ale pokud ho tedy do loop vložím, tak to vyhodí chybu a nahrát to nejde... asi chápu co by to mělo dělat, ale vyzkoušet a otestovat si to nemůžu, protože mi to neběží :(

Napsal: 03 úno 2015, 23:07
od MiloPS3
A jak to tam davas ? Ne jak o main ale jako funkci ,je tady tlacitko code , takze kdyz upravujes kod slusi se ho sem upnout , vesteckou kouli nemame, to sami s errorem ci jinym hlasenim

Napsal: 04 úno 2015, 09:26
od jiri255
ať to vložím kamkoliv do toho loopu ,tak to hlásí problém se závorkou za tím "int main(void)" a hláška je:

"a function-definition is not allowed here before '{' token

Napsal: 04 úno 2015, 09:35
od MiloPS3
Ne jak o main ale jako funkci ,je tady tlacitko code , takze kdyz upravujes kod slusi se ho sem upnout ,

Napsal: 04 úno 2015, 10:14
od jiri255
tlačítko code a co je tím myšleno nic takového v programu nemám? ... o pár příspěvků výše je upravený program, ale bylo mi vytčeno, že je to blbost ho takhle upravit, takže teď nechápu co vlastně řešíme?