„Informatika 2 - HTML, CSS - böngészők programozása labor” változatai közötti eltérés
a (David14 átnevezte a(z) LaborBeugro20080227 lapot a következő névre: Informatika 2 - Egyszerű web szerver készítése labor: Értelmes név) |
a |
||
1. sor: | 1. sor: | ||
− | + | Ez az oldal az [[Informatika 2]] című tárgy - Egyszerű web szerver készítése labor beugrókérdéseinek kidolgozását tartalmazza. | |
− | + | Jelenleg még elég hiányos a kidolgozás, továbbá évről évre kismértékben változhatnak beugrókérdések. A tanszéki honlapról mindig elérhető az aktuális mérési útmutató, mely az aktuális beugrókérdéseket tartalmazza. | |
− | + | '''Kérlek szerkesszétek, aktualizáljátok!''' | |
− | + | __TOC__ | |
+ | |||
+ | == Egy HTTP kommunikációban milyen felek vesznek részt és mi a feladatuk? == | ||
+ | |||
+ | Részt vesz egyrészt egy kliens, aki lekéréseket (query) küld a szervernek, és egy szerver, aki azokat fogadja és megválaszolja. A szerver a válasz elküldésén kívül még egyéb műveleteket is végrehajthat, pl. egy FORM elküldésekor generálódó POST lekérés hatására módosíthat valamit egy adatbázisban. | ||
+ | |||
+ | == A HTTP kommunikáció során hogyan állapodnak meg a felek a használandó HTTP protokoll verzióban? == | ||
A legnagyobb olyan verziót használják, amit mindkét résztvevő támogat. | A legnagyobb olyan verziót használják, amit mindkét résztvevő támogat. | ||
− | + | == A HTTP protokollban a kliens hogyan jelzi a kérés fejlécének végét? == | |
Két CR-LF sorozattal (0x0D 0x0A 0x0D 0x0A byteok). | Két CR-LF sorozattal (0x0D 0x0A 0x0D 0x0A byteok). | ||
− | + | == A HTTP GET kérés hogyan közli a lekérendő dokumentum nevét és elérhetőségét? == | |
A küldött parancs (pl. GET) után egy szóközzel elválasztva következik a dokumentum helye a szerver gyökérkönyvtárához képest. Pl. a www.google.com szervernek küldött GET / HTTP/1.0 lekérés magát a gyökérkönyvtárat kéri le (perjel). | A küldött parancs (pl. GET) után egy szóközzel elválasztva következik a dokumentum helye a szerver gyökérkönyvtárához képest. Pl. a www.google.com szervernek küldött GET / HTTP/1.0 lekérés magát a gyökérkönyvtárat kéri le (perjel). | ||
− | + | == A web szerver hogyan jelzi, ha hiba történt a dokumentum lekérése során? == | |
A válasz tartalmaz egy státuszkódot, ha ennek első számjegye 4-es, az kliensoldali hibát jelent (pl. 404 Not found), ha 5-ös, az szerveroldali hiba (pl. 500 Internal Server Error). A (HTTP 1.1-es) válaszkódok bővebben megtalálhatóak itt: http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html | A válasz tartalmaz egy státuszkódot, ha ennek első számjegye 4-es, az kliensoldali hibát jelent (pl. 404 Not found), ha 5-ös, az szerveroldali hiba (pl. 500 Internal Server Error). A (HTTP 1.1-es) válaszkódok bővebben megtalálhatóak itt: http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html | ||
− | + | == A web szerver milyen két módon jelezheti a dokumentum méretét (végét)? == | |
A fejlécben előre elküldheti a méretét (pl. Content-Length fejléc mező), vagy, amikor befejezte az átvitelt, simán bonthatja a kapcsolatot. | A fejlécben előre elküldheti a méretét (pl. Content-Length fejléc mező), vagy, amikor befejezte az átvitelt, simán bonthatja a kapcsolatot. | ||
− | + | ---- | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
+ | Keretprogram a 7-10-es feladatokhoz: | ||
<pre> | <pre> | ||
47. sor: | 48. sor: | ||
int main () { | int main () { | ||
− | char str[]="GET /index.html HTTP/1.0\x0d\x0a\x0d\x0a"; | + | char str[]="GET /index.html HTTP/1.0\x0d\x0a\x0d\x0a"; |
− | char str2[20]; | + | char str2[20]; |
− | char temp[20]; | + | char temp[20]; |
− | FILE *file; | + | FILE *file; |
− | SOCKET s; | + | SOCKET s; |
− | sockaddr_in addr; | + | sockaddr_in addr; |
− | /* | + | /* Ide kell beszúrni a lejjebb lévő a kódrészleteket */ |
− | + | closesocket(s); | |
+ | return 0; | ||
+ | } | ||
+ | </pre> | ||
− | + | == Írjon C nyelvű kódrészletet, amely megkeresi az str karakter tömbben tárolt szöveg második szavát, és az str2 tömbben visszaadja! == | |
− | + | <pre> | |
− | + | sscanf(str, "%*[^ ] %[^ ]", str2); | |
− | + | </pre> | |
− | + | == Írjon C nyelvű kódrészletet, amely megvizsgálja, hogy az str karakter tömbben tárolt szöveg első szava "GET"-e, és ha igen, akkor a második szavát az str2 tömbben visszaadja! == | |
− | + | <pre> | |
− | if ( | + | sscanf(str, "%[^ ]", str2); |
− | else | + | if (strcmp(str2, "GET")==0) sscanf(str, "%*[^ ] %[^ ]", str2); |
+ | else str2[0]='<verbatim></verbatim>'; | ||
+ | </pre> | ||
− | + | == Írjon C nyelvű kódrészletet, amely egy állományt binárisan megnyit, majd bezár! Ha a megnyitás sikertelen, akkor jelezze a hibát! == | |
− | + | <pre> | |
− | + | file=fopen("temp.bin", "rb"); | |
− | + | if (file==NULL) printf("hiba a file megnyitasakor\n"); | |
+ | else fclose(file); | ||
+ | </pre> | ||
− | + | == Írjon C nyelvű kódrészletet, amely az str karakter tömbben tárolt szöveget elküldi az s leíróval reprezentált kliens socketen keresztül! == | |
− | |||
− | |||
− | |||
− | |||
− | + | <pre> | |
− | + | addr.sin_family = AF_INET; | |
− | + | addr.sin_addr.s_addr = inet_addr("152.66.28.13"); /* a neptun címe :D */ | |
− | + | addr.sin_port = htons(80); | |
− | |||
− | |||
− | |||
+ | x=connect(s, (struct sockaddr *)addr, sizeof(addr)); | ||
+ | if (x<0) { | ||
+ | printf("kapcsolodasi hiba\n"); | ||
+ | return 1; | ||
+ | } | ||
− | + | x=send(s, (const void *)str, strlen(str), 0); | |
− | * | ||
+ | /* Figyelem! A sizeof() fordítási időben értékelődik ki, ezért a pointer méretét írja be, nem a tömbhosszát */ | ||
+ | |||
+ | if (x<0) printf("irasi hiba\n"); | ||
+ | else printf("%d byte elkuldve\n", x); | ||
+ | </pre> | ||
[[Category:Villanyalap]] | [[Category:Villanyalap]] |
A lap 2013. január 18., 14:46-kori változata
Ez az oldal az Informatika 2 című tárgy - Egyszerű web szerver készítése labor beugrókérdéseinek kidolgozását tartalmazza.
Jelenleg még elég hiányos a kidolgozás, továbbá évről évre kismértékben változhatnak beugrókérdések. A tanszéki honlapról mindig elérhető az aktuális mérési útmutató, mely az aktuális beugrókérdéseket tartalmazza.
Kérlek szerkesszétek, aktualizáljátok!
Tartalomjegyzék
- 1 Egy HTTP kommunikációban milyen felek vesznek részt és mi a feladatuk?
- 2 A HTTP kommunikáció során hogyan állapodnak meg a felek a használandó HTTP protokoll verzióban?
- 3 A HTTP protokollban a kliens hogyan jelzi a kérés fejlécének végét?
- 4 A HTTP GET kérés hogyan közli a lekérendő dokumentum nevét és elérhetőségét?
- 5 A web szerver hogyan jelzi, ha hiba történt a dokumentum lekérése során?
- 6 A web szerver milyen két módon jelezheti a dokumentum méretét (végét)?
- 7 Írjon C nyelvű kódrészletet, amely megkeresi az str karakter tömbben tárolt szöveg második szavát, és az str2 tömbben visszaadja!
- 8 Írjon C nyelvű kódrészletet, amely megvizsgálja, hogy az str karakter tömbben tárolt szöveg első szava "GET"-e, és ha igen, akkor a második szavát az str2 tömbben visszaadja!
- 9 Írjon C nyelvű kódrészletet, amely egy állományt binárisan megnyit, majd bezár! Ha a megnyitás sikertelen, akkor jelezze a hibát!
- 10 Írjon C nyelvű kódrészletet, amely az str karakter tömbben tárolt szöveget elküldi az s leíróval reprezentált kliens socketen keresztül!
Egy HTTP kommunikációban milyen felek vesznek részt és mi a feladatuk?
Részt vesz egyrészt egy kliens, aki lekéréseket (query) küld a szervernek, és egy szerver, aki azokat fogadja és megválaszolja. A szerver a válasz elküldésén kívül még egyéb műveleteket is végrehajthat, pl. egy FORM elküldésekor generálódó POST lekérés hatására módosíthat valamit egy adatbázisban.
A HTTP kommunikáció során hogyan állapodnak meg a felek a használandó HTTP protokoll verzióban?
A legnagyobb olyan verziót használják, amit mindkét résztvevő támogat.
A HTTP protokollban a kliens hogyan jelzi a kérés fejlécének végét?
Két CR-LF sorozattal (0x0D 0x0A 0x0D 0x0A byteok).
A HTTP GET kérés hogyan közli a lekérendő dokumentum nevét és elérhetőségét?
A küldött parancs (pl. GET) után egy szóközzel elválasztva következik a dokumentum helye a szerver gyökérkönyvtárához képest. Pl. a www.google.com szervernek küldött GET / HTTP/1.0 lekérés magát a gyökérkönyvtárat kéri le (perjel).
A web szerver hogyan jelzi, ha hiba történt a dokumentum lekérése során?
A válasz tartalmaz egy státuszkódot, ha ennek első számjegye 4-es, az kliensoldali hibát jelent (pl. 404 Not found), ha 5-ös, az szerveroldali hiba (pl. 500 Internal Server Error). A (HTTP 1.1-es) válaszkódok bővebben megtalálhatóak itt: http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html
A web szerver milyen két módon jelezheti a dokumentum méretét (végét)?
A fejlécben előre elküldheti a méretét (pl. Content-Length fejléc mező), vagy, amikor befejezte az átvitelt, simán bonthatja a kapcsolatot.
Keretprogram a 7-10-es feladatokhoz:
#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <strings.h> #include <unistd.h> int main () { char str[]="GET /index.html HTTP/1.0\x0d\x0a\x0d\x0a"; char str2[20]; char temp[20]; FILE *file; SOCKET s; sockaddr_in addr; /* Ide kell beszúrni a lejjebb lévő a kódrészleteket */ closesocket(s); return 0; }
Írjon C nyelvű kódrészletet, amely megkeresi az str karakter tömbben tárolt szöveg második szavát, és az str2 tömbben visszaadja!
sscanf(str, "%*[^ ] %[^ ]", str2);
Írjon C nyelvű kódrészletet, amely megvizsgálja, hogy az str karakter tömbben tárolt szöveg első szava "GET"-e, és ha igen, akkor a második szavát az str2 tömbben visszaadja!
sscanf(str, "%[^ ]", str2); if (strcmp(str2, "GET")==0) sscanf(str, "%*[^ ] %[^ ]", str2); else str2[0]='<verbatim></verbatim>';
Írjon C nyelvű kódrészletet, amely egy állományt binárisan megnyit, majd bezár! Ha a megnyitás sikertelen, akkor jelezze a hibát!
file=fopen("temp.bin", "rb"); if (file==NULL) printf("hiba a file megnyitasakor\n"); else fclose(file);
Írjon C nyelvű kódrészletet, amely az str karakter tömbben tárolt szöveget elküldi az s leíróval reprezentált kliens socketen keresztül!
addr.sin_family = AF_INET; addr.sin_addr.s_addr = inet_addr("152.66.28.13"); /* a neptun címe :D */ addr.sin_port = htons(80); x=connect(s, (struct sockaddr *)addr, sizeof(addr)); if (x<0) { printf("kapcsolodasi hiba\n"); return 1; } x=send(s, (const void *)str, strlen(str), 0); /* Figyelem! A sizeof() fordítási időben értékelődik ki, ezért a pointer méretét írja be, nem a tömbhosszát */ if (x<0) printf("irasi hiba\n"); else printf("%d byte elkuldve\n", x);