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 16:29]
Dmytro Kasianenko [Realizace. Server]
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.
----- +
-======== Zadání ====== +
-Realizujte zápis a čtení souborů z SD-karty přes Ethernet s použitím vývojové desky FRDM-K64F. Využijte protokol HTTP a jeho požadavky GET a PUT. Pro přístup k souborům na kartě vytvořte jednoduchou webovou stránku (listing). +
- +
----- +
- +
-======== Ú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á z severové a klientské časti. Server (na desce) troří webovu stranku, posíla požadavky klientu pro stahováni nebo nahrvání souborů. Klient posíla nebo přijíma soubory. ​  +
----- +
-======== 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+
 ---- ----
 ======== Realizace. Server ====== ​ ======== Realizace. Server ====== ​
-Úplný kód [[http://​pastie.org/​10657177|zde]].+Úplný kód [[http://​pastie.org/​10693300|zde]].
 ===== Webová stránka ===== ===== 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.
Řádek 40: Řá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 63: Řádek 52:
 } }
 </​code>​ </​code>​
 +----
 ===== Dowloading ===== ===== Dowloading =====
-Kliknutím na odkaz prohlížeč generuje GET-požadavek +Kliknutím na odkaz prohlížeč generuje GET-požadavek  
-GET /dir1 HTTP/1.1 ...+''​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''​):​ 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}} {{ :2015:1.png |stránka}}
 nebo kontroluje existuje-li soubor (funkce ''​overwrite_ask''​),​ ptá se o přepsání (funkce ''​send_overwrite_queston''​) ​ nebo kontroluje existuje-li soubor (funkce ''​overwrite_ask''​),​ ptá se o přepsání (funkce ''​send_overwrite_queston''​) ​
 {{ :2015:2.png |otázka}} {{ :2015:2.png |otázka}}
-a posílá soubor klientovi (funkce ''​dowloading''​).+posílá požadavek ''​PUT <Jméno souboru>'' ​a posílá soubor klientovi (funkce ''​dowloading''​). 
 +----
 ===== Uploading =====  ===== 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.1451316585.txt.gz · Poslední úprava: 2015/12/28 16:29 autor: Dmytro Kasianenko