Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
| Obě strany předchozí revize Předchozí verze Následující verze | Předchozí verze | ||
|
2015:http-sd [2015/12/28 17:59] 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á 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. | + | 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á z serverové a klientské části. Server (na desce) tvoří webovou stránku, posí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/10657347|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 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 | ||
| Řádek 71: | Řádek 61: | ||
| {{ :2015:2.png |otázka}} | {{ :2015:2.png |otázka}} | ||
| posílá požadavek ''PUT <Jméno souboru>'' 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ě nahrat soubor: | + | Pomoci formy je možně nahrát soubor: |
| {{ :2015:3.png?nolink |form}} | {{ :2015:3.png?nolink |form}} | ||
| Po výběru souboru prohlížeč pošle serveru GET-požadavek: | Po výběru souboru prohlížeč pošle serveru GET-požadavek: | ||
| Řádek 78: | Řádek 69: | ||
| 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. | 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. | Klient taky dostane jméno a pošle soubor serveru. | ||
| + | ---- | ||
| ==== Jíné funkce ==== | ==== Jíné funkce ==== | ||
| * ''cleaning'' - čištění proměnných | * ''cleaning'' - čištění proměnných | ||
| * ''add_to_html'' - přidání řádků do HTML-stránky | * ''add_to_html'' - přidání řádků do HTML-stránky | ||
| * ''going_up'' - jít nahoru ve systému souborů | * ''going_up'' - jít nahoru ve systému souborů | ||
| - | * ''url_decode'' - dekodování URL-adres | + | * ''url_decode'' - dekódování URL-adres |
| + | |||
| + | ---- | ||
| ======== Realizace. Klient ====== | ======== Realizace. Klient ====== | ||
| - | Úplný kód [[http://pastie.org/10657447|zde]]. | + | Úplný kód [[http://pastie.org/10657458|zde]]. |
| - | Na základě požadavků ze serveru klient hledá, posilá nebo dostavá soubory. | + | 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 ''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 ''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 klientoví. | + | * Při požadavku ''GET <Jméno souboru>'' posílá soubor klientu. |
| **Obecné řešení odesílání souborů:** | **Obecné řešení odesílání souborů:** | ||
| <code cpp> | <code cpp> | ||
| while(!myfile.eof()) | while(!myfile.eof()) | ||
| { | { | ||
| - | if (bytes_left<packet_size) // když můžeme poslat soubor nebo část souboru v 1 paketu | + | if (bytes_left<packet_size) //if we can send file or part of file in 1 packet |
| { | { | ||
| myfile.read(buf,bytes_left); | myfile.read(buf,bytes_left); | ||
| Řádek 100: | Řádek 95: | ||
| break; | break; | ||
| } | } | ||
| - | else // soubor nebo část souboru větší než 1 paket | + | else // file or part of file is bigger then 1 packett |
| { | { | ||
| myfile.read(buf,packet_size); | myfile.read(buf,packet_size); | ||
| size_send=send(sock,buf,packet_size,0); | size_send=send(sock,buf,packet_size,0); | ||
| } | } | ||
| - | bytes_left-=packet_size; //spočítáme kolik bytů zůstalo | + | bytes_left-=packet_size; //bytes left to send |
| } | } | ||
| </code> | </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. | ||