10_mrezno_progrvguamiranje

Upload: markovuk

Post on 17-Oct-2015

8 views

Category:

Documents


0 download

DESCRIPTION

vguy

TRANSCRIPT

  • 5/26/2018 10_mrezno_progrvguamiranje

    1/37

    Mreno programiranje

    Programski jezici II

  • 5/26/2018 10_mrezno_progrvguamiranje

    2/37

    Osnovne odrednice

    mreno programiranje pisanje programakoji komuniciraju preko raunarske mree

    oslanja se na IP mreni protokol

    mogunost korienja TCP i UDP protokola komunikacija se odvija kroz stream-ove

    (stream za itanje i stream za pisanje);jednako kao i sa fajlovima u okviru fajl-

    sistema; dvosmjerna komunikacija

    paket: java.net API niskog nivoa

    API visokog nivoa

  • 5/26/2018 10_mrezno_progrvguamiranje

    3/37

    OSI referentni model

  • 5/26/2018 10_mrezno_progrvguamiranje

    4/37

    OSI referentni model

    HTTP, SMTP, FTP, POP3, IMAP

    SSL/TLS

    TCP, UDP

    IP

    Ethernet

  • 5/26/2018 10_mrezno_progrvguamiranje

    5/37

    IP adresa

    identifikator vora u IP mrei je IP adresa IPv432-bitni broj4 grupe po 8 bita radi lakeg pamenja 4 decimalno zapisana

    okteta, npr. 147.91.197.2

    pomou simbolike adrese, npr. www.etfbl.net klasa InetAddress predstavlja adresu vora u mrei

    InetAddress a = InetAddress.getByName(www.etfbl.net);

    InetAddress b = InetAddress.getByName(147.91.197.2);

    InetAddress c = InetAddress.getLocalHost();

    IPv6128-bitni Otklanja nedostatke IPv4:

    Ogranien adresni prostor Sigurnost

  • 5/26/2018 10_mrezno_progrvguamiranje

    6/37

    InetAddress

  • 5/26/2018 10_mrezno_progrvguamiranje

    7/37

    InetAddress

  • 5/26/2018 10_mrezno_progrvguamiranje

    8/37

    Port

    16-bita655360 do 65535 01023well known ports

    http://www.iana.org/assignments/port-numbers

    FTP 21 DNS 53 SMTP 25

    HTTP 80 POP3 110 SNMP 161 HTTPS 443

  • 5/26/2018 10_mrezno_progrvguamiranje

    9/37

    Elementi klijent-server arhitekture

    klijent, server, mrea

    MreaKlijent

    Server

    klijentserver

  • 5/26/2018 10_mrezno_progrvguamiranje

    10/37

    Klase za mreno programiranje

    TCP i UDP protokoli

    TCP: URL

    URLConnection

    Socket

    ServerSocket

    UDP DatagramPacket DatagramSocket

    MulticastSocket

  • 5/26/2018 10_mrezno_progrvguamiranje

    11/37

    URL

    URLUniform Resource Locator predstavlja referencu (adresu) na resurs koji

    se nalazi na Internetu (ili drugoj mrei)

    web itai Java programi mogu koristiti URL kako bipronali i pristupili resursima na Internetu

    klasa URL u paketu java.net

    slui za reprezentaciju URL adrese dvojako znaenje: URL adresa URL objekat

  • 5/26/2018 10_mrezno_progrvguamiranje

    12/37

    URL

    primjer:http://docs.oracle.com

    format naziva resursa zavisi od protokola

    najee se sadri sljedee komponente: Host Namenaziv raunara na kojem se

    resurs nalazi Port Numberport na kojem server

    oslukuje, obino je opcion

    Filenameputanja do datoteke

    identifikator protokolanaziv resursa

  • 5/26/2018 10_mrezno_progrvguamiranje

    13/37

    Kreiranje URL objekta

    najjednostavniji nain na bazi stringa kojipredstalja URL adresu

    primjer: http://www.etfbl.netURL etf = new URL(http://www.etfbl.net);

    ovaj URL predstavlja apsolutnu putanjusadri sve informacije neophodne za pristupspecificiranom resursu

    URL objekti se mogu kreirati i iz relativnihURL adresaURL etf = new URL(http://www.etfbl.net);

    URL etfJava = new URL(etf, java/index.html);

    URL etfIP = new URL(etf, IP/index.html);

  • 5/26/2018 10_mrezno_progrvguamiranje

    14/37

    URL konstruktori

    URL(String spec) kreira URL objekat na bazi datog Stringa

    URL(String protocol, String host, int port, String file) kreira URL objekat na bazi datog protokola, naziva hosta, porta i putanje

    do resursa

    URL(String protocol, String host, int port, String file,

    URLStreamHandler handler) kreira URL objekat na bazi datog protokola, naziva hosta, porta, putanje

    do resursa i URLStreamHandler-a

    URL(String protocol, String host, String file) kreira URL objekat na bazi datog protokola, naziva hosta i putanje do

    resursa

    URL(URL context, String spec)

    kreira URL objekat parsirajui dati string unutar datog konteksta URL(URL context, String spec, URLStreamHandler handler)

    kreira URL objekat parsirajui dati string sa URLStreamHandler-om,unutar datog konteksta

    svi konstruktori mogu baciti izuzetak MalformedURLException potrebno je uhvatiti ga u try/catch bloku

  • 5/26/2018 10_mrezno_progrvguamiranje

    15/37

    Parsiranje URL-a

    metode: getProtocol getAuthority getHost getPort

    getPath getQuery getFile getRef

    primjer: protocol = http

    authority = www.etfbl.net:80 host = www.etfbl.net port = 80 path = /java/ query = c=prikazi&objekat=sadrzaj filename = /java/?c=prikazi&objekat=sadrzaj ref = DOWNLOAD

  • 5/26/2018 10_mrezno_progrvguamiranje

    16/37

    itanje iz URL-a

    nakon kreiranja URL objektapoziv metodeopenStream()vraa stream iz kojeg semoe itati sadraj sa specificiranog URL-a

    openStream() metoda vraajava.io.InputStreamObject

    URL etf = new URL("http://www.etfbl.net/");

    BufferedReader in = new BufferedReader( new

    InputStreamReader( etf.openStream()));

    String inputLine;

    while ((inputLine = in.readLine()) != null)

    System.out.println(inputLine);

  • 5/26/2018 10_mrezno_progrvguamiranje

    17/37

    URL

  • 5/26/2018 10_mrezno_progrvguamiranje

    18/37

    URL

  • 5/26/2018 10_mrezno_progrvguamiranje

    19/37

    URLConnection

    apstraktna klasa

    roditeljska klasa svih klasa koje predstavljajukomunikacioni link izmeu aplikacije i

    servisa koji se izvrava na URL adresipredstavljenoj objektom klase URL

    instance klasa koje nasljeujuURLConnection klasu mogu se koristiti:

    za upis u resurs, za itanje iz resursa specificiranog objektom

    klase URL, kao i

    za pristup osobinama udaljenog resursa

  • 5/26/2018 10_mrezno_progrvguamiranje

    20/37

    Povezivanje na URL -

    URLConnection

    nakon kreiranja URL objektapozivom openConnection metode dobija seURLConnection objekat ili objekat jedne od protokol-specifinih podklasa,npr. java.net.HttpURLConnection

    objekat tipa URLConnection se koristi za podeavanje parametara i optihosobina zahtjeva koje je u nekim sluajevim potrebno podesiti prije konekcije

    konekcija se uspostavlja prilikom poziva URLConnection.connect metode nije neophodno eksplicitno pozivati connect metodu u svim sluajevima:

    metode koje zahtjevaju postojanje konekcije, poput getInputStream, getOutputStream eimplicitno uspostaviti konekciju

    try {

    URL etf = new URL("http://www.etfbl.net/");

    URLConnection etfConnection = etf.openConnection();

    etfConnection.connect();

    } catch (MalformedURLException e) {

    // new URL() nije uspjean. . .

    } catch (IOException e) {

    // openConnection() nije uspjena. . .

    }

  • 5/26/2018 10_mrezno_progrvguamiranje

    21/37

    itanje iz i upis u URL konekciju

    input stream se dobija iz URLConnection objekat pozivom metodegetInputStream

    isti efekat kao i direktno itanje iz URL-a, ali moe biti korisnije jer seURLConnection objekat moe koristiti i za druge poslove

    primjer: URLConnectionReader

    upis u URL konekciju

    URLConnection connection = url.openConnection();

    connection.setDoOutput(true);

    OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream());

    out.write("string=" + xyz);

    out.close();

  • 5/26/2018 10_mrezno_progrvguamiranje

    22/37

    Pojam Socket-a

    pojam socket-a: ureeni par (IP adresa,port) jednog uesnika u komunikaciji

    uspostavljena veza izmeu dva

    programaskup od dva socket-a

    program A program B

    (81.92.25.123, 7890) (147.91.177.196, 2450)

  • 5/26/2018 10_mrezno_progrvguamiranje

    23/37

    Pojam Socket-a

    veza izmeu 2 programa, ne 2 raunara

    program A program B

    7890

    vor X (81.92.25.123) vor Y (147.91.177.196)

    2450

    3652 5489

    program C

    program D2223

    vor Z (215.23.5.12)

    6255

  • 5/26/2018 10_mrezno_progrvguamiranje

    24/37

    Klasa Socket

    objekti Socket klase predstavljajuuspostavljene TCP konekcije

    otvaranje konekcije:Socket s = new Socket(addr, 80);//addr-InetAddressSocket s = new Socket(www.etfbl.net, 80);

    metoda getInputStream()

    metoda getOutputStream()

  • 5/26/2018 10_mrezno_progrvguamiranje

    25/37

    Klasa ServerSocket

    predstavlja serverski socket

    metoda accept() blokira izvrenje sve dokneki klijent ne uspostavi vezu; tada vraa

    konstruisan Socket objekat preko kogase komunicira sa klijentom

    kreiranje objekata klase ServerSocket:ServerSocket ss = new ServerSocket(2345);

    oslukivanje:ss.accept();

  • 5/26/2018 10_mrezno_progrvguamiranje

    26/37

    Klijent-server komunikacija

  • 5/26/2018 10_mrezno_progrvguamiranje

    27/37

    Tipian tok komunikacije serverstrana

    // ekam klijenta...ServerSocket ss = new ServerSocket(port);Socket s = ss.accept();

    // inicijalizacijaBufferedReader in = new BufferedReader(...,s);

    PrintWriter out = new PrintWriter(...,s);

    // komunikacijaString request = in.readLine(); // itam zahtjevout.println(odgovor); // aljem odgovor

    // prekid vezein.close();out.close();s.close();

  • 5/26/2018 10_mrezno_progrvguamiranje

    28/37

    Tipian tok komunikacije klijentstrana

    // inicijalizacija

    Socket s = new Socket(addr, port);

    BufferedReader in = new BufferedReader(...,s);

    PrintWriter out = new PrintWriter(...,s);

    // komunikacija

    out.println(zahtjev); // aljem zahtjev

    String response = in.readLine();// itam odgovor

    // prekid veze

    in.close();out.close();

    s.close();

  • 5/26/2018 10_mrezno_progrvguamiranje

    29/37

    Server koji opsluuje vie klijenata

  • 5/26/2018 10_mrezno_progrvguamiranje

    30/37

    Server koji opsluuje vie klijenata

    // beskonana petlja

    while (true)

    server slua

    prihvata konekciju

    kreira nit za komunikaciju sa klijentom

    end while

  • 5/26/2018 10_mrezno_progrvguamiranje

    31/37

    Server koji opsluuje vie klijenata

    Server

    Threads

    ServerKlijent 1

    Klijent 2

    Mrea

  • 5/26/2018 10_mrezno_progrvguamiranje

    32/37

    Server koji opsluuje vie klijenata

    // Serverska petlja

    ServerSocket ss = new ServerSocket(port);

    while (true) {

    Socket s = ss.accept();

    ServerThread st = new ServerThread(s);

    }

    // poseban thread obrada pojedinanog zahtjeva

    class ServerThread extends Thread {

    public void run() {

    // inicijalizacija// komunikacija

    // prekid veze

    }

    }

  • 5/26/2018 10_mrezno_progrvguamiranje

    33/37

    Java Socket-i

    ServerSocket(1234)

    Socket(147.91.197.2, 1234)

    Output/write stream

    Input/read stream

    www.etfbl.net

    Klijent

    Server

  • 5/26/2018 10_mrezno_progrvguamiranje

    34/37

    PrimjerECHO server

    klijent klijent uspostavlja vezu sa serverom alje zahtjev (tekst) ita odgovor servera

    ispisuje odgovor na konzolu zavrava komunikaciju

    server eka klijente u beskonanoj petlji

    za svakog klijenta pokree poseban thread zaobradu:

    ita zahtjev klijenta alje odgovor identian zahtjevu

  • 5/26/2018 10_mrezno_progrvguamiranje

    35/37

    Datagrami

    datagram je nezavisna,samosadravajua poruka poslata prekomree, ije se stizanje, vrijeme stizanja i

    sadraj ne garantuje 3 klase za rad sa datagramima:

    DatagramSocket

    DatagramPacket

    MulticastSocket

  • 5/26/2018 10_mrezno_progrvguamiranje

    36/37

    Datagrami

    kreiranje Datagram socket-a na serverskoj strani

    DatagramSocket socket = new DatagramSocket(4445); na klijentskoj strani

    DatagramSocket socket = new DatagramSocket();

    kreiranje Datagram paketa

    za itanje byte[] buf = new byte[256]; DatagramPacket packet = new DatagramPacket(buf, buf.length);

    za slanje byte[] buf = new byte[256]; DatagramPacket packet = new DatagramPacket(buf, buf.length, address,

    port);

    prihvatanje paketa

    socket.receive(packet); slanje paketa

    socket.send(packet);

    primjer QuoteServer

  • 5/26/2018 10_mrezno_progrvguamiranje

    37/37

    Datagrami

    slanje ka veem broju klijenata

    Primjer: MulticastServer

    MulticastClient