10_mrezno_progrvguamiranje
DESCRIPTION
vguyTRANSCRIPT
-
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