Lezione p09.pptx - Riccardo Cassinis

Programmazione Avanzata Java e C 2012-­‐2013 Lezione 9 File e conne=vità in rete Programmazione Avanzata Java e C
Lezione 9:
File e connettività in rete.
22 ottobre 2012
Memorizzazione permanente
ð Una trattazione più approfondita dei file sarà effettuata
parlando del C.
ð In Java, scrivere e rileggere un file è molto semplice: lo
vediamo con l’esempio riportato nell’application “scrive
file”.
Lezione 9 File e connettività in rete
22 o6obre 2012 22 ottobre 2012
© 2012 -­‐ 2014 Riccardo Cassinis -­‐ Tu= i diri= riservaF 2
1 Programmazione Avanzata Java e C 2012-­‐2013 Lezione 9 File e conne=vità in rete Due parole sulla sicurezza
ð La volta scorsa abbiamo scritto un’application che
scriveva e rileggeva un file
ð Chi ha provato a trasformarla in un’applet si sarà
accorto che le cose non sono così facili
ð Le ragioni di ciò sono legate esclusivamente alla
sicurezza
ð Se compro un programma, lo installo e lo faccio girare,
sono parte attiva di ciò che accade, e le eventuali
conseguenze sono colpa mia
ð Se invece una pagina HTML mi installa un’applet che fa
cose “sbagliate”, la colpa non è mia
ð Per evitare questo:
Lezione 9 File e connettività in rete
22 ottobre 2012
3
Cosa non può fare un’applet
ð Un applet caricata da un server remoto non può
 
 
 
 
 
 
Caricare librerie
Utilizzare metodi nativi
Leggere o scrivere direttamente file del client
Aprire connessioni di rete ad altri sistemi che non siano il
server da cui è stata caricata
Eseguire processi o applicazioni sul client
Leggere alcune proprietà del client che si è ritenuto opportuno
dovessero rimanere riservate
ð Inoltre,
 
Una finestra aperta da un applet si deve differenziare da una
normale finestra di sistema in modo da evitare che qualcuno
usi un applet per clonare il pannello di logon di un sistema e
catturarne così le informazioni di accesso
Lezione 9 File e connettività in rete
22 o6obre 2012 22 ottobre 2012
© 2012 -­‐ 2014 Riccardo Cassinis -­‐ Tu= i diri= riservaF 4
2 Programmazione Avanzata Java e C 2012-­‐2013 Lezione 9 File e conne=vità in rete Questo non significa che queste cose non
si possano fare…
ð Ma sono piuttosto complicate, e le procedure esulano
dagli scopi di questo corso
ð Si basano comunque su un concetto di “fiducia”: una
volta che si è sicuri che un applet proviene veramente da
una fonte sicura, è possibile “aprire” un certo set di
permessi.
ð L’esempio “Scrive file Applet” mostra come si può
procedere.
Lezione 9 File e connettività in rete
22 ottobre 2012
5
Parliamo ora di comunicazione in rete
ð La maniera più semplice per far parlare due applicazioni
residenti su macchine diverse (e perché no, anche sulla
stessa macchina) è quella di aprire e collegare insieme
dei socket
Lezione 9 File e connettività in rete
22 o6obre 2012 22 ottobre 2012
© 2012 -­‐ 2014 Riccardo Cassinis -­‐ Tu= i diri= riservaF 6
3 Programmazione Avanzata Java e C 2012-­‐2013 Lezione 9 File e conne=vità in rete L’identificazione della macchina
ð Due forme possibili:
 
 
Dotted quad: 192.167.20.92
4 x 8 = 32 bit: 2564 possibili indirizzi (in teoria) =
4.294.967.296 indirizzi
•  Indirizzi pubblici
•  Indirizzi privati:
–  10.000.000.001 - 10.255.255.254
–  172.016.000.001 - 172.031.255.254
–  192.168.000.001 - 192.168.255.254
•  Indirizzi speciali:
–  Broadcast
–  Localhost.localdomain (127.0.0.1)
 
Domain Name System: zeus.ing.unibs.it
Lezione 9 File e connettività in rete
22 ottobre 2012
7
Due parole sulla struttura della rete:
Nodo
Name server
Nodo
Gateway
Nodo
Nodo
Gateway
Nodo
Nodo
Nodo
Nodo
Lezione 9 File e connettività in rete
22 o6obre 2012 22 ottobre 2012
© 2012 -­‐ 2014 Riccardo Cassinis -­‐ Tu= i diri= riservaF 8
4 Programmazione Avanzata Java e C 2012-­‐2013 Lezione 9 File e conne=vità in rete L’identificazione della macchina
Il package java.net
 
 
InetAddress.getByName(<nome>) ritorna un oggetto di tipo
InetAddress
InetAddress.getByName(null) ritorna un oggetto di tipo
InetAddress che si riferisce al calcolatore su cui gira il
programma chiamante (oppure anche
InetAddress.getByName(“localhost”)
o
InetAddress.getByName(“127.0.0.1”)
Lezione 9 File e connettività in rete
22 ottobre 2012
9
Le porte
ð Un indirizzo IP non è sufficiente per identificare un
server, perché sulla stessa macchina possono esistere più
server
ð Le porte sono identificate da un numero a 16 bit, che
indica il servizio associato a quella porta
ð Le porte da 1 a 1024 sono riservate al sistema
ð C’è una convenzione internazionale sull’uso delle porte:
http://www.iana.org/assignments/port-numbers
Lezione 9 File e connettività in rete
22 o6obre 2012 22 ottobre 2012
© 2012 -­‐ 2014 Riccardo Cassinis -­‐ Tu= i diri= riservaF 10
5 Programmazione Avanzata Java e C 2012-­‐2013 Lezione 9 File e conne=vità in rete I socket (1)
 
 
The socket is the software abstraction used to
represent the “terminals” of a connection
between two machines.
For a given connection, there’s a socket on each
machine, and you can imagine a hypothetical
“cable” running between the two machines with
each end of the “cable” plugged into a socket. Of
course, the physical hardware and cabling
between machines is completely unknown. The
whole point of the abstraction is that we don’t
have to know more than is necessary.
Lezione 9 File e connettività in rete
22 ottobre 2012
11
I socket (2)
ð  In Java, you:
1. 
2. 
create a socket to make the connection to the other
machine;
then you get an InputStream and OutputStream
(or, with the appropriate converters, Reader and
Writer) from the socket in order to be able to treat the
connection as an I/O stream object.
ð  There are two stream-based socket classes: a
ServerSocket that a server uses to “listen” for
incoming connections and a Socket that a client
uses in order to initiate a connection.
Lezione 9 File e connettività in rete
22 o6obre 2012 22 ottobre 2012
© 2012 -­‐ 2014 Riccardo Cassinis -­‐ Tu= i diri= riservaF 12
6 Programmazione Avanzata Java e C 2012-­‐2013 Lezione 9 File e conne=vità in rete I socket (3)
ð Once a client makes a socket connection, the
ServerSocket returns (via the accept( ) method)
a corresponding Socket through which
communications will take place on the server side.
ð From then on, you have a true Socket to Socket
connection and you treat both ends the same way
because they are the same. At this point, you use
the methods getInputStream( ) and
getOutputStream( ) to produce the
corresponding InputStream and
OutputStream objects from each Socket.
Lezione 9 File e connettività in rete
22 ottobre 2012
13
Riassumendo: Client Vs. Server (1)
InetAddress addr = InetAddress.getByName("frank.ing.unibs.it");
ServerSocket s = new ServerSocket(PORTNUMBER);
Attenzione! accept()
blocca l’esecuzione del
metodo chiamante!
Socket socket = s.accept();
Socket socket = new Socket(addr, PORTNUMBER);
Lezione 9 File e connettività in rete
22 o6obre 2012 22 ottobre 2012
© 2012 -­‐ 2014 Riccardo Cassinis -­‐ Tu= i diri= riservaF 14
7 Programmazione Avanzata Java e C 2012-­‐2013 Lezione 9 File e conne=vità in rete Riassumendo: Client Vs. Server (2)
PrintWriter out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream())),true);
BufferedReader in = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(new BufferedWriter(
OutputStreamWriter(socket.getOutputStream())),true);
new
BufferedReader in = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
Lezione 9 File e connettività in rete
22 ottobre 2012
15
22 ottobre 2012
16
Riassumendo: Client Vs. Server (3)
out.println(”bla bla");
String str = in.readLine();
out.println(str);
String str = in.readLine();
Lezione 9 File e connettività in rete
22 o6obre 2012 © 2012 -­‐ 2014 Riccardo Cassinis -­‐ Tu= i diri= riservaF 8 Programmazione Avanzata Java e C 2012-­‐2013 Lezione 9 File e conne=vità in rete Riassumendo: Client Vs. Server (4)
socket.close();
socket.close();
s.close();
Lezione 9 File e connettività in rete
22 o6obre 2012 22 ottobre 2012
© 2012 -­‐ 2014 Riccardo Cassinis -­‐ Tu= i diri= riservaF 17
9