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