Individální projekty MPOA

Mikroprocesory s architekturou ARM

Uživatelské nástroje

Nástroje pro tento web


2015:http-sd

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Následující verze
Předchozí verze
2015:http-sd [2015/12/28 15:42]
Dmytro Kasianenko vytvořeno
2015:http-sd [2016/01/18 12:23] (aktuální)
Dmytro Kasianenko [Realizace. Server]
Řádek 5: Řádek 5:
  
 ======== Úvod ====== ======== Úvod ======
-Vývojové deska připojena přes Ethernet. Na web-stránce (10.42.0.2) je vytvořen seznam souborů a složek a je možnost ​stahnout ​nebo nahrat ​soubory na SD-kartu. Projekt se skladá ​severové ​a klientské časti. Server (na desce) ​troří webovu strankuposíla ​požadavky klientu pro stahováni nebo nahrvání ​souborů. Klient ​posíla ​nebo přijíma ​soubory.  ​+Vývojové deska připojena přes Ethernet. Na web-stránce (10.42.0.2) je vytvořen seznam souborů a složek a je možnost ​stáhnout ​nebo nahrát ​soubory na SD-kartu. Projekt se skládá ​serverové ​a klientské části. Server (na desce) ​tvoří webovou stránkuposílá ​požadavky klientu pro stahováni nebo nahrávání ​souborů. Klient ​posílá ​nebo přijímá ​soubory.  ​
 ---- ----
 ======== Software ====== ​ ======== Software ====== ​
-Pro realizace projektu je použit compiler [[https://​developer.mbed.org/​|mbed]] a knihovny pro práce z sockety a SD-karty pro severovu ​čast a g++ pro klientskou čast+Pro realizace projektu je použit compiler [[https://​developer.mbed.org/​|mbed]] a knihovny pro práce z sockety a SD-karty pro serverovou ​část a g++ pro klientskou část.
 ---- ----
-======== Realizace ====== ​+======== Realizace. Server ​======  
 +Úplný kód [[http://​pastie.org/​10693300|zde]]. 
 +===== Webová stránka ​=====
 Je puštěn jednoduchý web-server, který odpovídá na požadavky prohlížeče HTML-stránkou,​ která se generuje na základě obsahu SD-karty. Je puštěn jednoduchý web-server, který odpovídá na požadavky prohlížeče HTML-stránkou,​ která se generuje na základě obsahu SD-karty.
-Pro to je vytvořená funkce ​**make_html_list**+Pro to je vytvořená funkce ​''​make_html_list''​
 <code cpp> <code cpp>
 void make_html_list(const char *fsrc, int err) void make_html_list(const char *fsrc, int err)
Řádek 27: Řádek 29:
     {     {
       struct dirent *p;       struct dirent *p;
-      while ((p = readdir(d)) != NULL)  //creating ​list of files and directories in directory+      while ((p = readdir(d)) != NULL)  //create ​list of files and directories in directory
       {       {
-            add_to_html (p->​d_name); ​   //adding ​them to HTML page+            add_to_html (p->​d_name); ​   //and add them to HTML page
       }       }
     }     }
Řádek 50: Řádek 52:
 } }
 </​code>​ </​code>​
 +----
 +===== Dowloading =====
 +Kliknutím na odkaz prohlížeč generuje GET-požadavek ​
 +''​GET /dir1 HTTP/1.1 ...''​
 +který čte web-server, a v závislosti na to je-li to složka nebo soubor, generuje stránku s obsahem teto složky (funkce ''​make_html_list''​):​
 +{{ :2015:1.png |stránka}}
 +nebo kontroluje existuje-li soubor (funkce ''​overwrite_ask''​),​ ptá se o přepsání (funkce ''​send_overwrite_queston''​) ​
 +{{ :2015:2.png |otázka}}
 +posílá požadavek ''​PUT <Jméno souboru>''​ a posílá soubor klientovi (funkce ''​dowloading''​).
 +----
 +===== Uploading ===== 
 +Pomoci formy je možně nahrát soubor:
 +{{ :​2015:​3.png?​nolink |form}}
 +Po výběru souboru prohlížeč pošle serveru GET-požadavek:​
 +''​GET /?​file=<​Jméno souboru> HTTP/1.1 …''​.
 +Server z toho dostane jméno souboru (funkce ''​get_file_name''​ a ''​del_file''​) a pomoci funkce ''​uploading''​ pošle klientu požadavek ''​GET <Jméno souboru>''​ a bude čekat soubor.
 +Klient taky dostane jméno a pošle soubor serveru.
 +----
 +==== Jíné funkce ====
 +  * ''​cleaning''​ - čištění proměnných
 +  * ''​add_to_html''​ - přidání řádků do HTML-stránky
 +  * ''​going_up''​ - jít nahoru ve systému souborů
 +  * ''​url_decode''​ - dekódování URL-adres
 +
 +----
 +======== Realizace. Klient ====== ​
 +Úplný kód [[http://​pastie.org/​10657458|zde]].
 +
 +Na základě požadavků ze serveru klient hledá, posílá nebo dostává soubory.
 +  * Při požadavku ''​FND <Jméno souboru>''​ klient hledá soubor ve složce a posílá '​1'​ když soubor soubor je nalezen nebo '​0'​ když není.
 +  * Při požadavku ''​PUT <Jméno souboru>''​ otevírá soubor a zapisuje přijaté data do něho. ​
 +  * Při požadavku ''​GET <Jméno souboru>''​ posílá soubor klientu.
 +
 +**Obecné řešení odesílání souborů:**
 +<code cpp>
 +while(!myfile.eof())
 + {
 +    if (bytes_left<​packet_size) //if we can send file or part of file in 1 packet
 +        {
 +         ​ myfile.read(buf,​bytes_left);​
 +          size_send=send(sock,​buf,​bytes_left,​0);​
 +             ​ break;​
 +        }
 +        else    // file or part of file is bigger then 1 packett
 +        {
 +          myfile.read(buf,​packet_size);​
 +          size_send=send(sock,​buf,​packet_size,​0);​
 +        }    ​
 +bytes_left-=packet_size;​ //​bytes left to send
 +}
 +</​code>​
 +====== Video demostrace ======
 +  - Přechod mezi složky
 +  - Uploading urldecode.out do složky /sd/mydir
 +  - Uploading 2.png
 +  - Downloading tpy.cpp
 +  - Downloading urldecode.out
 +{{youtube>​D0202I0p_mY?​medium}}
 +====== Závěr ======
 +Cíle projektu byly dosaženy: lze stahovat a nahrávat soubory přes webové rozhraní. Ale je možnosti rozšířit ho funkčnost, například sledovat stav sítě a opakovat předávání souboru za jeho přerušení,​ nebo používat bezdrátový spoj atd.
2015/http-sd.1451313746.txt.gz · Poslední úprava: 2015/12/28 15:42 autor: Dmytro Kasianenko