„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) |
a |
||
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]] |
A lap 2013. február 11., 20:20-kori változata
Ez az oldal az Informatika 2 című tárgy - TCP 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 Mi a különbség a szerver és a kliens socket között?
- 2 A cím összeállításánál miért szükséges a számokat konvertálni?
- 3 Milyen függvényekkel tud kommunikálni a kliens és a szerver?
- 4 A kommunikációs kapcsolatot hogyan zárhatja le a kliens, illetve a szerver oldal?
- 5 Írjon egy „hello világ” programot!
- 6 C-kód: Lementi egy állományba a „hello” szöveget!
- 7 C-kód: Az s leíróval reprezentált kliens kliens socket-en keresztül elküldi a „hello” szöveget!
- 8 C-kód: Az s leíróval reprezentált kliens socketből képes 64 byte adat fogadására!
- 9 C-kód: Megvizsgálja, hogy az str1 és str2 nevű karakter tömbök tartalma megegyezik-e!
- 10 C-kód: Megvizsgálja, hogy az str1 nevű karakter tömb tartalmazza-e az str2 nevű karakter tömb értékét!
- 11 Egy HTTP kommunikációban milyen felek vesznek részt és mi a feladatuk?
- 12 A HTTP protokollban a kliens hogyan jelzi a kérés fejlécének végét?
- 13 A HTTP GET kérés hogyan közli a lekérendő dokumentum nevét és elérhetőségét?
- 14 A web szerver hogyan jelzi, ha hiba történt a dokumentum lekérése során?
- 15 Mi az a két mód, ahogy a web szerver jelezheti a dokumentum méretét (végét)?
Mi a különbség a szerver és a kliens socket között?
Szerver:
- Bizonyos címen várja az igényeket, majd befutásuk után felépíti a kapcsolatot
- Kommunikációra NEM alkalmas, csak kapcsolatok fogadására
Kliens:
- A szerver címére kapcsolódási kérést küld, amelyre az reagálhat
- Kommunikációra használjuk
A cím összeállításánál miért szükséges a számokat konvertálni?
- Több byte-os adattípusokat használunk, de különböző architektúra [math]\rightarrow[/math] különböző adatábrázolás (x86=little endian=kisebb helyiértékű byte-al kezd, Sun=big endian)
- DE: ezeknek meg kell érteni egymást [math]\rightarrow[/math] közös ábrázolás, hálózati byte-sorrend (big endian)
- 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?
- int closesocket(SOCKET s) rendszerhívá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!
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.