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

Obě strany předchozí revize Předchozí verze
Následující verze
Předchozí verze
2015:http-sd [2015/12/28 15:51]
Dmytro Kasianenko
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. Server ====== ​ ======== 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>​
-Kliknutím na odkaz prohlížeč generuje GET-požadavek +---- 
-GET /dir1 HTTP/1.1 ... +===== Dowloading ===== 
-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:  +Kliknutím na odkaz prohlížeč generuje GET-požadavek  
-{{ :​2015:​1.png?​200|}}+''​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.1451314269.txt.gz · Poslední úprava: 2015/12/28 15:51 autor: Dmytro Kasianenko