„Informatika 2 - HTML, CSS - böngészők programozása labor” változatai közötti eltérés

A VIK Wikiből
Ugrás a navigációhoz Ugrás a kereséshez
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:
{{GlobalTemplate|Villanyalap|LaborBeugro20080227}}
+
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.
  
* 1. Egy HTTP kommunikációban milyen felek vesznek részt és mi a feladatuk?
+
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.
  
Résztvesz 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.
+
'''Kérlek szerkesszétek, aktualizáljátok!'''
  
* 2. A HTTP kommunikáció során hogyan állapodnak meg a felek a használandó HTTP protokoll verzióban?  
+
__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.
  
* 3. A HTTP protokollban a kliens hogyan jelzi a kérés fejlécének végét?
+
== 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).
  
* 4. A HTTP GET kérés hogyan közli a lekérendő dokumentum nevét és elérhetőségét?
+
== 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).
  
* 5. A web szerver hogyan jelzi, ha hiba történt a dokumentum lekérése során?
+
== 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
  
* 6. A web szerver milyen két módon jelezheti a dokumentum méretét (végét)?
+
== 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.
  
* 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!
 
  
 +
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;
  
/* 7 */
+
/* Ide kell beszúrni a lejjebb lévő a kódrészleteket */
  
sscanf(str, "%*[^ ] %[^ ]", str2);
+
closesocket(s);
 +
return 0;
 +
}
 +
</pre>
  
/* 8 */
+
== Í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);
+
<pre>
if (strcmp(str2, "GET")==0) sscanf(str, "%*[^ ] %[^ ]", str2);
+
sscanf(str, "%*[^ ] %[^ ]", str2);
else str2[0]='<verbatim></verbatim>';
+
</pre>
  
/* 9 */
+
== Í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! ==
  
file=fopen("temp.bin", "rb");
+
<pre>
if (file==NULL) printf("hiba a file megnyitasakor\n");
+
sscanf(str, "%[^ ]", str2);
else fclose(file);
+
if (strcmp(str2, "GET")==0) sscanf(str, "%*[^ ] %[^ ]", str2);
 +
else str2[0]='<verbatim></verbatim>';
 +
</pre>
  
/* 10 */
+
== Í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! ==
  
addr.sin_family = AF_INET;  
+
<pre>
addr.sin_addr.s_addr = inet_addr("152.66.28.13"); /* a neptun címe :D */
+
file=fopen("temp.bin", "rb");
addr.sin_port = htons(80);
+
if (file==NULL) printf("hiba a file megnyitasakor\n");
 +
else fclose(file);
 +
</pre>
  
x=connect(s, (struct sockaddr *)addr, sizeof(addr));
+
== Í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! ==
if (x<0) {
 
printf("kapcsolodasi hiba\n");
 
return 1;
 
}
 
  
x=send(s, (const void *)str, strlen(str), 0); //figyelem!! sizeof() fordítási időben értékelődik ki, ezért a pointer méretét írja be, nem a tömbhosszát
+
<pre>
if (x<0) printf("irasi hiba\n");
+
addr.sin_family = AF_INET;  
else printf("%d byte elkuldve\n", x);
+
addr.sin_addr.s_addr = inet_addr("152.66.28.13"); /* a neptun címe :D */
closesocket(s);
+
addr.sin_port = htons(80);
return 0;
 
}
 
</pre>
 
  
 +
x=connect(s, (struct sockaddr *)addr, sizeof(addr));
 +
if (x<0) {
 +
printf("kapcsolodasi hiba\n");
 +
return 1;
 +
}
  
-- [[KisGergelyG|G]] - 2008.02.26.
+
x=send(s, (const void *)str, strlen(str), 0);
* {{InLineFileLink|Villanyalap|LaborBeugro20080227|WebSzerver.pdf|WebSzerver.pdf}}: A beugró maga
 
  
 +
/* 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!

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);