„Informatika 2 - Socket kezelés labor” változatai közötti eltérés
a David14 átnevezte a(z) Informatika 2 - TCP szerver készítése labor lapot a következő névre: Informatika 2 - Socket kezelés labor: 2013 aktualizálás |
aNincs szerkesztési összefoglaló |
||
| 22. sor: | 22. sor: | ||
*Adott architektúrán használt ábrázolás: ''hoszt byte-sorrend'' | *Adott architektúrán használt ábrázolás: ''hoszt byte-sorrend'' | ||
== | == Milyen függvényekkel tud kommunikálni a kliens és a szerver? == | ||
== A kommunikációs kapcsolatot hogyan zárhatja le a kliens, illetve a szerver oldal? == | == A kommunikációs kapcsolatot hogyan zárhatja le a kliens, illetve a szerver oldal? == | ||
| 36. sor: | 29. sor: | ||
*Linux alatt: ''int close(int s)'' | *Linux alatt: ''int close(int s)'' | ||
== | == Írjon egy „hello világ” programot! == | ||
== C-kód: Lementi egy állományba a „hello” szöveget! == | |||
== C-kód: Az s leíróval reprezentált kliens kliens socket-en keresztül elküldi a „hello” szöveget! == | |||
== | int x; | ||
char message[]="hello"; | |||
x=send(s, (const void *)message, sizeof(message), 0); | |||
if (x<0) printf("írási hiba\n"); | |||
else printf("%d byte elküldve\n", x); | |||
== C-kód: Az s leíróval reprezentált kliens socketből képes 64 byte adat fogadására! == | |||
int x; | |||
char *buffer; | |||
buffer=(char *)malloc(sizeof(char)*64); /* 16 byte hely lefoglalása */ | |||
x=recv(s, (void *)buffer, sizeof(buffer), 0); | |||
if (x<0) printf("olvasási hiba\n"); | |||
if (x==0) printf("olvasás sikeres, a kapcsolat lezárult\n"); | |||
if (x>0) printf("olvasás sikeres\n"); | |||
free(buffer); | |||
== C-kód: Megvizsgálja, hogy az str1 és str2 nevű karakter tömbök tartalma megegyezik-e! == | == C-kód: Megvizsgálja, hogy az str1 és str2 nevű karakter tömbök tartalma megegyezik-e! == | ||
int x; | |||
char str1[]="qwerty"; | |||
char str2[]="spqr"; | |||
x=strcmp(str1, str2); | |||
if (x==0) printf("a két string azonos\n"); | |||
else printf("a két string különbözı\n"); | |||
== C-kód: Megvizsgálja, hogy az str1 nevű karakter tömb tartalmazza-e az str2 nevű karakter tömb értékét! == | |||
== | char str1[]="qwerty"; | ||
char str2[]="spqr"; | |||
char *temp; | |||
temp=strstr(str1, str2); | |||
if (temp!=NULL) printf("az elsı string tartalmazza a másodikat\n"); | |||
else printf("az elsı string nem tartalmazza a másodikat\n"); | |||
== Egy HTTP kommunikációban milyen felek vesznek részt és mi a feladatuk? == | |||
#Kliens (böngésző): | |||
#*A beírt cím alapján megállapítja a szerve IP-címét (DNS fordítás is!) | |||
#*TCP/IP-kapcsolatot hoz létre a szerver felé | |||
#*HTTP-kéréseket küld a szerver felé | |||
#Szerver: | |||
#*HTTP-válaszokat küld a kliens kéréseire (nincs hiba: lekért oldalt tartalmazza) | |||
#*Bizonyos kérésekre egy adatbázisban módosíthat | |||
#*A válasz végén lebontja a kapcsolatot | |||
== 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 (hibakó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 | |||
== Mi az a két mód, ahogy a web szerver jelezheti a dokumentum méretét (végét)? == | |||
A fejlécben előre elküldheti a dokumentum méretét (pl. Content-Length fejléc mező), vagy az átvitel befejezése után simán bontja a TCP/IP-kapcsolatot. | |||
[[Category:Villanyalap]] | [[Category:Villanyalap]] | ||