Microsoft PowerPoint - vjezbe_04.ppt

Слични документи
Računarske mreže Čas 2 Ivana Tanasijević Matematički fakultet, Beograd 1

Microsoft PowerPoint - MR - Vjezbe - 03.ppt [Compatibility Mode]

SVEUČILIŠTE U ZAGREBU FAKULTET ORGANIZACIJE I INFORMATIKE V A R A Ž D I N Kristijan Perković Mrežna igra Potapanje brodova u programskom jeziku C++ ZA

Uvod u Python

Rad u mrežnom okruženju Osnove informatike s primjenom računala

Računarske mreže i mrežne tehnologije 10. termin 1. TRANSPORTNI SLOJ Transportni sloj nije još samo jedan od mnogih slojeva jer je njegova uloga sama

Microsoft Word - IP_Tables_programski_alat.doc

Microsoft Word _Vipnet_komentar_BSA_final.doc

Mrežno računarstvo

Microsoft Word - CCERT-PUBDOC doc

PowerPoint Presentation

Računarski praktikum I - Vježbe 03 - Implementacija strukture string

Uvod u računarstvo 2+2

Računarski praktikum I - Vježbe 01 - Uvod

Računarski praktikum I - Vježbe 07 - Podstrukture, const, reference

Programski jezik C

Microsoft PowerPoint - 06 Uvod u racunarske mreze.ppt

IErica_ActsUp_paged.qxd

Microsoft PowerPoint - 01 Uvod u operativne sisteme.ppt

Funkcije predavač: Nadežda Jakšić

Računarski praktikum II - Predavanje 03 - Apache Web server

PowerPoint Presentation

Programiranje 2 0. predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog2 2019, 0. predavanje p. 1/4

JMBAG Ime i Prezime Mreže računala Završni ispit 16. veljače Na kolokviju je dozvoljeno koristiti samo pribor za pisanje i službeni šalabahter.

PuTTY CERT.hr-PUBDOC

Računarski praktikum I - Vježbe 11 - Funktori

UPUTSTVO ZA PODEŠAVANJE MOBILNIH UREĐAJA ZA MMS

R u z v e l t o v a 5 5, B e o g r a d, t e l : ( ) , m a i l : c o n t a c p s i t. r s, w w w. p s i t. r s

Microsoft Word - 13-Mreze.doc

Microsoft Word - van sj Zakon o privrednoj komori -B.doc

Mrežno računarstvo

Ethernet lokalna mreža

Web programiranje i primjene - Osnovni pojmovi WEB tehnologije korišteni u kolegiju

Sluzbeni glasnik Grada Poreca br

KORISNIČKE UPUTE APLIKACIJA ZA POTPIS DATOTEKA

Microsoft Word - WLA-5200AP_QSG_HRV_7modes_1.doc

М И Л Е Н А К У Л И Ћ Ј ЕД НО Ч И Н К А ЗА П Е ТО РО ПУТ ИЗ БИ ЛЕ ЋЕ Сред пу ша ка, ба јо не та, стра же око нас, Ти хо кре ће на ша че та, кроз би ле

Računalne mreže Osnove informatike s primjenom računala

070-ALIP2-udzbenik.indb

Programiranje 2 popravni kolokvij, 15. lipnja Ime i prezime: JMBAG: Upute: Na kolokviju je dozvoljeno koristiti samo pribor za pisanje i brisanj

ELEKTROTEHNIČKI FAKULTET UNIVERZITETA U BEOGRADU BEOGRAD, Ispit iz Programiranja 2 Ispit traje 135 minuta Napomene: a) Pažljivo proučite U

Internet

Microsoft Word - IWT0906R.doc

Uvod u računarstvo 2+2

DIGITALNA OBRADA SLIKE

Uvod u računarstvo 2+2

ПРИ ЛОГ 1 1. ЗАХ ТЕ ВИ Прет ход но упа ко ва ни про из во ди из чла на 3. овог пра вил ника про из во де се та ко да ис пу ња ва ју сле де ће зах те в

Microsoft Word - DNS_DHCP.doc

Повезивање са интернетом

DIGITALNA OBRADA SLIKE

Programiranje za UNIX Okruženje unix procesa

Microsoft PowerPoint - Bitovi [Compatibility Mode]

Microsoft Word - Izvjestaj, Matra radionice, svibanj 2011

Programiranje 1 Beleške sa vežbi Školska 2007/2008 godina Matematički fakultet, Beograd Jelena Tomašević December 5, 2007

XHTML 2.0 and HTML 5

Upute za instaliranje WordPressa 1.KORAK Da biste instalirali Wordpress, najprije morate preuzeti najnoviju verziju programa s web stranice WordPressa

_Outlook

ПО Е ЗИ ЈА И ПРО ЗА Ж И ВО РА Д Н Е Д Е Љ КО ВИ Ћ Х Е ДО Н И ЗА М ШТА САМ МО ГАО Мо жда ни ка да не ћу са зна ти шта сам мо гао Да ура дим у жи во ту,

Korisničke upute za podnošenje zahtjeva za rješavanje spora (žalbe)

PRIRODNO MATEMATIČKI FAKULTET U NIŠU DEPARTMAN ZA RAČUNARSKE NAUKE Utorak, godine PRIJEMNI ISPIT IZ INFORMATIKE 1. Koja od navedenih ekste

ПО Е ЗИ ЈА И ПРО ЗА Д РА ГА Н ЈО ВА НО ВИ Ћ Д А Н И ЛОВ РЕ Ч И СТ РА Ш Н И Ј Е ОД ВЕ ЈА ВИ Ц Е ОПРА ШТА ЊЕ С МАЈ КОМ До ђе и к ме ни ста рост да ми у

POSLOVNI INFORMACIONI SISTEMI I RA^UNARSKE

REPUBLIKA HRVATSKA MINISTARSTVO PRAVOSUĐA Korisničke upute e-građani aplikacije za elektronsko izdavanje posebnog uvjerenja iz kaznene evidencije Zagr

PowerPoint Presentation

Microsoft Word - Aerodromi_cjenovnik

Microsoft PowerPoint - Datoteke [Compatibility Mode]

Smjernice za korištenje sustava online prijava Ukoliko imate pristupno korisničko ime i lozinku ili ste navedeno dobili nakon zahtjeva za otvaranje no

Funkcije predavač: Nadežda Jakšić

COMARC/A Format

OpenDNS Family Shield CERT.hr-PUBDOC

Microsoft Word - IQ.doc

Studij Ime i prezime Broj bodova MATEMATIKA 2 1. dio, grupa A 1. kolokvij 12. travnja Kolokvij se sastoji od dva dijela koja se pi²u po 55 minut

eredar Sustav upravljanja prijavama odjelu komunalnog gospodarstva 1 UPUTE ZA KORIŠTENJE SUSTAVA 1. O eredar sustavu eredar je sustav upravljanja prij

Microsoft Word - CCERT-PUBDOC doc

Tutoring System for Distance Learning of Java Programming Language

1. Vremensko ograničenje Memorijsko ograničenje ulaz izlaz 0,1 s 64 MB standardni ulaz standardni izlaz Banka želi da upozori kupce na sumnjive aktivn

Sluzbeni List Broj OK3_Sluzbeni List Broj OK2.qxd

Glava I - Glava Dokumentacija III - Iz ra da koju bi lan sa kontroliše uspe ha Poreska i naj češ će inspekcija Sadržaj greš ke Sadržaj 3 Predgovor 13

23. siječnja od 13:00 do 14:00 Školsko natjecanje / Osnove informatike Srednje škole RJEŠENJA ZADATAKA S OBJAŠNJENJIMA Sponzori Medijski pokrovi

NASTANAK OPASNE SITUACIJE U SLUČAJU SUDARA VOZILA I PEŠAKA TITLE OF THE PAPER IN ENGLISH Milan Vujanić 1 ; Tijana Ivanisevic 2 ; Re zi me: Je dan od n

PowerPoint Presentation

PHP kod

Generated by Foxit PDF Creator Foxit Software For evaluation only. Operativni sistem U računarstvu, operativni sistem (OS

** Osnovni meni

Microsoft PowerPoint - PRI2014 KORIGOVANO [Compatibility Mode]

DIGITALNA OBRADA SLIKE

Feng Shui za ljubav MONTAZA 3:Feng Shui_Love Int. Mech.qxd

User's Manual

Upute-podesavanj -accounta

Programiranje u C-u ili C++-u Pseudo-slučajni brojevi; Dinamička alokacija memorije 1 ZADACI SA ČASA Zadatak 1 Napraviti funkciju koja generišlučajan

broj 068_Layout 1

Na osno vu čla na 58. stav 2. tač ka 1. Za ko na o osi gu ra nju (Slu žbe ni gla snik RS br 55/04, 70/04 i 101/07) i čla na 50. stav 1. ali neja 2. St

PROCES KUPNJE ULAZNICE NA PORTALU ULAZNICE.HR Početak kupovine... 2 Plaćanje Mastercard karticom... 5 Plaćanje Maestro karticom... 8 Plaćanje American

СТАРТ - СТОП ПАРКИНГ СИСТЕМ КОРИСНИЧКО УПУТСТВО страна 1 од 12

Microsoft Word - WP_kolokvij_2_rjesenja.doc

Programiranje 1 9. predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog1 2018, 9. predavanje p. 1/6

Uvod u računarstvo 2+2

Z A K O N O SUDSKIM VEŠTACIMA I. UVODNE ODREDBE lan 1. Ovim zakonom ure uju se uslovi za obavljanje vešta enja, postupak imenovanja i razrešenja sudsk

Microsoft PowerPoint - Programski_Jezik_C_Organizacija_Izvornog_Programa_I_Greske [Compatibility Mode]

Транскрипт:

Sveu ili te u Zagrebu PMF Matemati ki odjel Vje be 040 Matko Botin an Zvonimir Bujanovi Igor Jelaska Maja Karaga

Klijent / Server paradigma internet daje infrastrukturu koja omogu ava komunikaciju izme u bilo koja 2 ra unala preciznije, komunikacija se odvija izme u aplikacija: Firefox na jednom stroju komunicira sa web-serverom na drugom traceroute aplikacija komunicira sa firmware-om u router-ima da bi aplikacije A i B mogla komunicirati, jedna od njih mora inicirati kontakt sa drugom drugim rije ima, jednoj treba usluga koju druga aplikacija pru a klijent (client) aplikacija koja aktivno inicira kontakt server aplikacija koja pasivno eka kontakt 01.10.2007. Mre e ra unala - Vje be 01 2

Klijent / Server paradigma klijentski software tipi no... aktivno inicira kontakt sa serverom je aplikacija koja privremeno postaje klijent kada joj zatreba usluga neke udaljene aplikacije, tako er obavlja i neke druge lokalne operacije (izra unava ne to, crta su elje za korisnika...) je aplikacija koju korisnik pokrene, koristi neko vrijeme dok mu je potrebna, i onda ju ugasi (dakle, ivi samo jednu sesiju) se izvr ava lokalno na osobnom ra unalu korisnika ne zahtjeva specijalizirani hardware niti operativni sustav 01.10.2007. Mre e ra unala - Vje be 01 3

Klijent / Server paradigma serverski software tipi no... pasivno eka kontakt proizvoljnog udaljenog klijenta je specijalizirana aplikacija koja slu i isklju ivo tome da pru a jednu konkretnu uslugu mo e poslu ivati nekoliko udaljenih klijenata odjednom se pokre e automatski kada se ra unalo pali, radi cijelo vrijeme dok je ra unalo upaljeno, obra uje brojne klijentske zahtjeve kako dolaze ( ivi kroz mnogo sesija) se izvr ava na specijaliziranom ra unalu (zato esto samo to ra unalo nazivamo npr. web-server, mail-server ) zahtjeva sna an hardware i sofisticirani operativni sustav 01.10.2007. Mre e ra unala - Vje be 01 4

Primjeri interakcije klijenata i servera obradit emo nekoliko primjera komunikacije izme u servera i klijenta redovito e na in protokol komunikacije biti TCP daytime to no vrijeme http dohva anje web-stranice echo vrati nazad ono to ti po aljem telnet izvr avanje naredbi na udaljenom ra unalu ftp prijenos datoteka izme u ra unala http://beej.us/guide/bgnet/ http://devmentor.org/articles/network/socket%20programming.pdf (Windows Sockets; pomalo zastarjelo) 01.10.2007. Mre e ra unala - Vje be 01 5

daytime promatramo zasad samo klijenta, serveri cijelo vrijeme rade na ve ini UNIX strojeva i komuniciraju na portu 13 port 13 klijent server (crna kutija) IP: 12.34.56.7 01.10.2007. Mre e ra unala - Vje be 01 6

daytime klijent prvo treba stvoriti okru enje za komunikaciju treba definirati protokol koji eli koristiti Ja bih s nekim pri ao koriste i internet i TCP protokol port 13 klijent server (crna kutija) IP: 12.34.56.7 01.10.2007. Mre e ra unala - Vje be 01 7

Definira okru enje za komunikaciju socket domena = PF_INET (komunikacija internetom) tip = SOCK_STREAM za TCP protokol tip = SOCK_DGRAM za UDP protokol protokol = 0 za sve na e potrebe tzv. "uti nicu". Za svako ra unalo/aplikaciju sa kojom se komunicira unutar klijenta/servera potrebno je stvoriti po jednu uti nicu. Uti nicom e se jednozna no u ostalim funkcijama odre ivati tko s kim i na koji na in komunicira. int socket( int domena, int tip, int protokol ); povratna vrijednost = -1 ako je do lo do gre ke (tada poziv funkcije perror daje detalje o gre ki) 01.10.2007. Mre e ra unala - Vje be 01 8

Primjer: socket int mojsocket = socket( PF_INET, SOCK_STREAM, 0 ); if( mojsocket == -1 ) perror( "socket" ); 01.10.2007. Mre e ra unala - Vje be 01 9

daytime jednom kad ima uti nicu, klijent treba specificirati na koji server se eli spojiti treba znati i IP-adresu i port Ja bih se spojio na IP-adresu 12.34.56.7 i to na port 13 port 13 klijent server (crna kutija) IP: 12.34.56.7 01.10.2007. Mre e ra unala - Vje be 01 10

connect Specificira IP-adresu i port sa kojom se komunicira preko dane uti nice. Adresa i port se specificiraju preko posebne strukture: struct sockaddr_in { short sin_family; unsigned short sin_port; struct in_addr sin_addr; char sin_zero[8]; }; sin_family = vrsta adrese, za nas AF_INET (komunikacija internetom) sin_port = port na serveru na koji se spajamo (broj izme u 0 i 65535) sin_addr = binarna IP-adresa servera sin_zero = polje iji se svi elementi uvijek postave na 0 01.10.2007. Mre e ra unala - Vje be 01 11

sock connect int connect( int sock, struct sockaddr *servaddr, int lenaddr ); servaddr o serveru uti nica koju smo stvorili sa funkcijom socket napunjena sockaddr_in structura (koristimo cast!), uva podatke lenaddr = sizeof( servaddr ) povratna vrijednost = -1 ako nije uspjelo (pozovi i perror za ispis detalja), 0 ina e Funkcija connect poku ava ostvariti konekciju izme u klijenta i udaljenog servera. Potrebno ju je pozivati samo za spojne protokole poput TCP (nije potrebna za UDP). 01.10.2007. Mre e ra unala - Vje be 01 12

Primjer: connect char dekadskiip[] = "12.34.56.7"; struct sockaddr_in adresaservera; adresaservera.sin_family = AF_INET; adresaservera.sin_port = htons( 13 ); if( inet_aton( dekadskiip, &adresaservera.sin_addr ) == 0 ) printf( "%s nije dobra adresa!\n", dekadskiip ); memset( adresaservera.sin_zero, '\0', 8 ); if( connect( mojsocket, (struct sockaddr *) &adresaservera, sizeof( adresaservera ) ) == -1 ) perror( "connect" ); 01.10.2007. Mre e ra unala - Vje be 01 13

htons / htonl / ntohs / ntohl svaki broj (2 ili 4 byte-ni) koji se alje preko mre e treba imati poredak byte-ova u tzv. Network orderu, koji se mo e razlikovati od poretka byte-ove kori tenog na lokalnom ra unalu (tzv. Host order) gornje funkcije rade odgovaraju e konverzije: short htons( short x ) long htonl( long x ) short ntohs( short x ) long ntohl( long x ) prima x u Host orderu, vra a u Network prima x u Host orderu, vra a u Network prima x u Network orderu, vra a u Host prima x u Network orderu, vra a u Host funkcija inet_aton vra a binarnu IP-adresu u Network orderu, pa tu ne treba konverzija 01.10.2007. Mre e ra unala - Vje be 01 14

daytime sada je ostvarena konekcija izme u klijenta i servera i mo emo razmijenjivati podatke po daytime protokolu protokol je vrlo jednostavan: server po alje trenutni datum i vrijeme klijentu i odmah zatvori konekciju port 13 klijent Netko se spojio na mene! Poslat u mu to no vrijeme i prekinuti razgovor da me vi e ne gnjavi. server (crna kutija) IP: 12.34.56.7 01.10.2007. Mre e ra unala - Vje be 01 15

recv Slu i za primanje poruke sa udaljenog ra unala. Blokira daljnje izvr avanje programa sve dok zaista ne to ne primi. ssize_t recv( int sock, void *buffer, size_t duljinabuffera, int opcije ); sock uti nica stvorena sa sock i povezana sa connect buffer adresa (naj e e polje znakova; mo e biti i npr. adresa samo jednog int-a) na koju spremamo podatke koji dolaze sa servera duljinabuffera = sizeof( buffer ) opcije = 0 za sve na e potrebe 01.10.2007. Mre e ra unala - Vje be 01 16

recv recv prima maksimalno onoliko podataka kolika je duljinabuffera. Povratna vrijednost: 0, ako je druga strana prekinula konekciju -1, ako je do lo do pogre ke (pozovi perror za detalje) ina e, broj byte-ova koji je stigao od udaljenog ra unala Problem: kako znati kada je druga strana zavr ila sa slanjem? Nekoliko mogu ih scenarija: 1. znamo da poruka mora biti velika N byte-ova ponavljamo recv sve dok ukupno ne primimo N byte-ova 2. druga strana prvo ka e: poslat u M byte-ova, mi primimo tu poruku, i zatim u itavamo sve dok ne primimo M byte-ova 3. druga strana je prekinula konekciju 01.10.2007. Mre e ra unala - Vje be 01 17

recvfrom uo i: da bismo mogli primati podatke sa recv, nu no treba postojati konekcija ako koristimo npr. UDP protokol (SOCK_DGRAM kod poziva funkcije socket), ne trebamo pozivati funkciju connect, ali onda umjesto recv koristimo: ssize_t recvfrom( int sock, void *buffer, size_t duljinabuffera, int opcije struct sockaddr *servaddr, socklen_t *lenaddr ); prva 4 parametra su isti kao kod recv, zadnja 2 su isti kao kod connect 01.10.2007. Mre e ra unala - Vje be 01 18

recv Primjer za daytime (znamo da e server prekinuti konekciju kada nam po alje to no vrijeme): char buffer[100]; int primljeno = 0; // koliko smo byte-ova ukupno primili int novoprimljeno; // koliko je primljeno u zadnjem recv while( 1 ) { novoprimljeno = recv( mojsocket, buffer + primljeno, sizeof( buffer ) primljeno - 1, // zbog '\0' 0 ); if( novoprimljeno == -1 ) { perror( "recv" ); exit(0); } else if( novoprimljeno == 0 ) break; else primljeno += novoprimljeno; } buffer[primljeno] = '\0'; printf( "%s", buffer ); 01.10.2007. Mre e ra unala - Vje be 01 19

daytime kada smo zavr ili komunikaciju sa serverom i uti nica nam vi e ne treba, mo emo ju zatvoriti Sad zam koliko je sati i ne moram vi e pri ati sa serverom. Maknut u ovu uti nicu, ne treba mi vi e! port 13 klijent server (crna kutija) IP: 12.34.56.7 01.10.2007. Mre e ra unala - Vje be 01 20

close Prestanak upotrebe uti nice, osloba a se memorija koju je ona tro ila. int close( int sock ); sock uti nica koju vi e ne trebamo koristiti povratna vrijednost = -1 ako je do lo do gre ke (perror za detalje), 0 ina e. Primjer: if( close( mojsocket ) == -1 ) perror( "close" ); 01.10.2007. Mre e ra unala - Vje be 01 21

Zadatak 1 Spojite sve navedene primjere u funkcionalni program. Poku ajte se spojiti na vi e razli itih daytime-servera tako da modificirate IP-adresu servera. 01.10.2007. Mre e ra unala - Vje be 01 22

daytime server Sada emo napisati i server. Koristit emo neki drugi port (npr. 54321) za na u aplikaciju (13 je rezervirani port!) klijent I meni isto treba uti nica da bih mogao komunicirati. Napravit u je sa funkcijom socket. server 01.10.2007. Mre e ra unala - Vje be 01 23

daytime server Kada napravi uti nicu, server treba re i na kojem e portu vr iti komunikaciju sa klijentima. Vi e uti nica mo e komunicirati putem jednog porta. Mogu a je komunikacija i kroz vi e portova. klijent Ja sa klijentima elim komunicirati na portu 54321. server 01.10.2007. Mre e ra unala - Vje be 01 24

sock bind Specificira na kojem e portu i kojoj IP-adresi komunicirati uti nica napravljena sa socket(). int bind( int sock, struct sockaddr *servaddr, socklen_t addrlen ); uti nica koju smo napravili sa socket() servaddr napunjena sockaddr_in structura (koristimo cast!), uva podatke o serveru. Ako ne znamo serverovu (tj. vlastitu) IP-adresu, ili znamo da imamo samo jednu IP-adresu, mo emo postaviti servaddr.s_addr = INADDR_ANY; i to polje e automatski biti ispunjeno na ispravan na in. addrlen = sizeof( servaddr ); povratna vrijednost = -1 ako je do lo do gre ke (perror za detalje), 0 ina e 01.10.2007. Mre e ra unala - Vje be 01 25

Primjer: struct sockaddr_in mojaadresa; bind mojaadresa.sin_family = AF_INET; mojaadresa.sin_port = htons( 54321 ); mojaadresa.sin_addr.s_addr = INADDR_ANY; memset( mojaadresa.sin_zero, '\0', 8 ); if( bind( listenersocket, (struct sockaddr *) &mojaadresa, sizeof( mojaadresa ) ) == -1 ) perror( "bind" ); 01.10.2007. Mre e ra unala - Vje be 01 26

daytime server Sada server treba rezervirati uti nicu da jednostavno eka da neki klijent poku a uspostaviti konekciju na portu 54321... port 54321 klijent Ova uti nica koju imam e slu iti za oslu kivanje klijenata. server 01.10.2007. Mre e ra unala - Vje be 01 27

listen Rezerviracija uti nice koja e slu iti serveru za oslu kivanje nadolaze eg kontakta na danom portu. int listen( int sock, int maxkonekcija ); sock uti nica koju smo napravili sa socket() i dali joj port pomo u bind() maxkonekcija koliko maksimalno klijenata odjednom mo e ekati na uslugu servera. Ostali e pri poku aju connect-a dobiti pogre ku "Connection refused" povratna vrijednost = -1 ako je do lo do gre ke (perror za detalje), 0 ina e 01.10.2007. Mre e ra unala - Vje be 01 28

Primjer: listen if( listen( listenersocket, 10 ) == -1 ) perror( "listen" ); Serveri esto istovremeno komuniciraju sa vi e klijenata. Za komunikaciju sa svakim od klijenata obi no imaju po jednu uti nicu (vidi dalje), dok je jedna uti nica rezervirana samo za oslu kivanje novih nadolaze ih konekcija. (tzv. listener-socket) 01.10.2007. Mre e ra unala - Vje be 01 29

daytime server Kada klijent poku a uspostaviti komunikaciju sa serverom, server ju mo e i ne mora prihvatiti. I ja zapravo imam port kroz koji komuniciram, napravio mi ga je connect! port 54321 klijent Da li da prihvatim spoj sa ovim klijentom? server 01.10.2007. Mre e ra unala - Vje be 01 30

accept Slu i sa prihva anje prijedloga konekcije od strane klijenta. Doznat emo klijentovu adresu i dobiti novu uti nicu za komunikaciju sa njime. int accept( int listenersock, struct sockaddr *klijentaddr, unsigned int *lenaddr ); listenersock listener uti nica kojom oslu kujemo dolaze e konekcije. Mo emo ju ponovno upotrijebiti. klijentaddr adresa klijenta, tip joj je sockaddr_in, trebamo napraviti cast lenaddr treba postaviti na adresu varijable u kojoj je sizeof( klijentaddr ) klijentaddr popunjava funkcija accept (a ne mi) povratna vrijednost = -1 ako je do lo do gre ke (perror za detalje), ina e nova uti nica za komunikaciju sa klijentom 01.10.2007. Mre e ra unala - Vje be 01 31

Primjer: accept struct sockaddr_in klijentadresa; unsigned int lenaddr = sizeof( klijentadresa ); int commsocket = accept( listenersocket, (struct sockaddr *) &klijentadresa, &lenaddr ); if( commsocket == -1 ) perror( "accept" ); char *dekadskiip = inet_ntoa( klijentadresa.sin_addr ); printf( "Prihvatio konekciju od %s\n", dekadskiip ); Funkcija accept blokira daljnje izvr avanje serverske aplikacije sve dok neki klijent ne poku a pristupiti serveru. 01.10.2007. Mre e ra unala - Vje be 01 32

daytime server Nakon prihva anja konekcije, server mo e poslati podatke o to nom vremenu. nova uti nica (commsocket) port 54321 klijent Sada klijentu trebam poslati podatke o to nom vremenu. server 01.10.2007. Mre e ra unala - Vje be 01 33

send Slanje podataka udaljenom ra unalu. Funkcionira po posve istoj logici kao recv (jedino to sad unaprijed znamo koliko byte-ova treba poslati). ssize_t send( int sock, const void *buffer, size_t duljinabuffera, int opcije ); sock uti nica preko koje se odvija komunikacija buffer adresa (naj e e polje znakova; mo e biti i npr. adresa samo jednog int-a) na koju spremamo podatke koji dolaze sa servera duljinabuffera = sizeof( buffer ) opcije = 0 za sve na e potrebe 01.10.2007. Mre e ra unala - Vje be 01 34

sendto podatke pomo u send mo e slati i klijent ako klijent koristi npr. UDP protokol (SOCK_DGRAM kod poziva funkcije socket), ne treba pozivati funkciju connect, ali onda umjesto send koristi: ssize_t sendto( int sock, void *buffer, size_t duljinabuffera, int opcije, struct sockaddr *servaddr, socklen_t *lenaddr ); prva 4 parametra su isti kao kod send, zadnja 2 su isti kao kod connect 01.10.2007. Mre e ra unala - Vje be 01 35

Primjer: #include <time.h> send time_t trenutnovrijeme; time( &trenutnovrijeme ); char buffer[100]; sprintf( buffer, "%s", ctime( &trenutnovrijeme ) ); int trebaposlati = strlen( buffer ); int poslano = 0; // broj do sada poslanih byte-ova int poslanozadnje; // koliko je poslano u zadnjem send while( poslano!= trebaposlati ) { poslanozadnje = send( commsocket, buffer + poslano, trebaposlati poslano, 0 ); if( poslanozadnje == -1 ) perror( "send" ); else poslano += poslanozadnje; } 01.10.2007. Mre e ra unala - Vje be 01 36

daytime server Nakon to je poslao to no vrijeme, server mo e prekinuti konekciju tako da zatvori komunikacijsku uti nicu. Nakon toga mo e nastaviti oslu kivati eventualne nove klijente. port 54321 klijent Ne da mi se vi e pri ati s tobom, klijente! server 01.10.2007. Mre e ra unala - Vje be 01 37

Zadatak 2 Spojite sve navedene primjere u funkcionalni daytime-server koji mo e poslu ivati vi e klijenata (uo i: ne odjednom, ve jednog za drugim!) Promijenite daytime-klijenta iz Zadatka 1 tako da se mo e spajati na port 54321. Spojite se promijenjenim klijentom na server iz prve to ke. 01.10.2007. Mre e ra unala - Vje be 01 38

Zadatak 3 Napi ite echo-klijent. Echo-klijent treba: spojiti se na ra unalo student na port 7 (tamo se nalazi echoserver) u petlji u itavati rije i sve dok se ne u ita rije svaku u itanu rije poslati serveru kraj pro itati serverov odgovor i ispisati ga na ekran to radi echo-server? Napi ite ga (sami odaberite port komunikacije). Prilagodite svoj echo-klijent tako da sa komandne linije dobiva IP-adresu i port echo-servera na kojeg se treba spojiti. Testirajte sa echo-serverom na studentu i onim kojeg ste sami napisali. 01.10.2007. Mre e ra unala - Vje be 01 39

Zadatak 4 Napi ite primitivni web-browser koji e mo i prikazati jednu web-stranicu u tekstualnom modu. za web se koristi tzv. http-protokol. web-browser (tj. http-klijent) treba: spojiti se na proizvoljni host-name kojeg dobijete iz komandne linije na port 80 (tamo se uvijek nalaze http-serveri) poslati serveru poruku "GET / HTTP/1.0\n\n" u itavati odgovor servera i ispisati ga na ekran Modificirajte program tako da ispisujete samo ono to se nalazi izme u <body i </body> (ili <BODY i </BODY>). Nemojte ispisivati ni ta to se nalazi izme u znakova "<" i ">" (niti njih). 01.10.2007. Mre e ra unala - Vje be 01 40