Appunti dei corsi di

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Appunti dei corsi di"

Transcript

1 Appunti dei corsi di PROF. G. BONGIOVANNI 1) UTILIZZO DI JAVA PER LO SVILUPPO DI APPLICAZIONI DI RETE ) Ripasso di AWT ) Input/Output in Java ) Classe InputStream ) Classe OutputStream ) Estensione della funzionalità degli Stream ) Classe FilterInputStream ) Classe FilterOutputStream ) BufferedInputStream e BufferedOutputStream ) DataInputStream e DataOutputStream ) PrintStream ) Esempi di uso degli stream di filtro ) Tipi base di Stream ) Stream per accesso a file ) Stream per accesso alla memoria ) Stream per accesso a connessioni di rete ) Classe Socket ) Classe ServerSocket ) Multithreading ) Classe Thread ) Interfaccia Runnable Sincronizzazione ) Metodi sincronizzati ) Istruzioni sincronizzate ) Wait() e Notify()

2 1) Utilizzo di Java per lo sviluppo di applicazioni di rete! "# $%& &'(') ) Messaggio Header Dati da trasmettere Informazioni di controllo #* " + # ) ) "!) # SocketServerSocket!) Exception!) Thread! 2

3 ' " ' # (,) %-) 1.1) Ripasso di AWT. / 01 2! 2 # 3 ) 4 main(string args[]) 3

4 5 # 6 7 main() BaseAppE1 Frame! import java.awt.*; public class BaseAppE1 extends Frame { Label label1, label2, label3, label4; TextField textfield1, textfield2; TextArea textarea1, textarea2; 4

5 Button button1, button2, button3, button4, button5, button6; public BaseAppE1() { this.setlayout(null); label1 = new Label("Label1:"); label1.reshape(110, 5, 40, 15); this.add(label1); textfield1 = new TextField(); textfield1.reshape(150, 10, 200, 15); this.add(textfield1); label2 = new Label("Label2:"); label2.reshape(370, 5, 40, 15); this.add(label2); textfield2 = new TextField(); textfield2.reshape(410, 10, 30, 15); this.add(textfield2); label3 = new Label("Label3:"); label3.reshape(20, 25, 100, 15); this.add(label3); textarea1 = new TextArea(); textarea1.reshape(20, 40, 560, 50); this.add(textarea1); label4 = new Label("Label4:"); label4.reshape(20, 95, 100, 15); this.add(label4); textarea2 = new TextArea(); textarea2.reshape(20, 110, 560, 300); this.add(textarea2); button1 = new Button("Button1"); button1.reshape(70, 430, 60, 20); this.add(button1); button2 = new Button("Button2"); button2.reshape(150, 430, 60, 20); this.add(button2); button3 = new Button("Button3"); button3.reshape(230, 430, 60, 20); this.add(button3); button4 = new Button("Button4"); button4.reshape(310, 430, 60, 20); this.add(button4); button5 = new Button("Button5"); button5.reshape(390, 430, 60, 20); this.add(button5); button6 = new Button("Button6"); button6.reshape(470, 430, 60, 20); this.add(button6); resize(600, 460); show(); public static void main(string args[]) { new BaseAppE1(); public boolean handleevent(event event) { if (event.id == Event.WINDOW_DESTROY) { hide(); // hide the Frame dispose(); System.exit(0); // exit return true; // tell windowing system to free resources if (event.target == button1 && event.id == Event.ACTION_EVENT) { button1_clicked(event); 5

6 if (event.target == button2 && event.id == Event.ACTION_EVENT) { button2_clicked(event); if (event.target == button3 && event.id == Event.ACTION_EVENT) { button3_clicked(event); if (event.target == button4 && event.id == Event.ACTION_EVENT) { button4_clicked(event); if (event.target == button5 && event.id == Event.ACTION_EVENT) { button5_clicked(event); if (event.target == button6 && event.id == Event.ACTION_EVENT) { button6_clicked(event); return super.handleevent(event); void button1_clicked(event event) { textarea2.settext(textarea2.gettext() + "Hai premuto bottone 1\n"); void button2_clicked(event event) { textarea2.settext(textarea2.gettext() + "Hai premuto bottone 2\n"); void button3_clicked(event event) { textarea2.settext(textarea2.gettext() + "Hai premuto bottone 3\n"); void button4_clicked(event event) { textarea2.settext(textarea2.gettext() + "Hai premuto bottone 4\n"); void button5_clicked(event event) { textarea2.settext(textarea2.gettext() + "Hai premuto bottone 5\n"); void button6_clicked(event event) { textarea2.settext(textarea2.gettext() + "Hai premuto bottone 6\n"); 1.2) Input/Output in Java 2(,+!8 / " # ) &'('!) 6

7 8 (,! 4 / InputStream!OutputStream!# Scritture Letture OutputStream Canale di comunicazione InputStream #% / OutputStream InputStream 8 "# #/ OutputStream InputStream) # RandomAccessFile/!) # InputStream! OutputStream! % 9 # Socket! ) # : $ : ) 1.2.1) Classe InputStream ; public InputStream(); Vuoto. 7

8 public abstract int read() throws IOException; Legge e restituisce un byte (range 0-255) o si blocca se non c'è niente da leggere. Restituisce il valore -1 se incontra la fine dello stream. public int read(byte[] buf) throws IOException; Legge fino a riempire l'array buf, o si blocca se non ci sono abbastanza dati. Restituisce il numero di byte letti, o il valore -1 se incontra la fine dello stream. L'implementazione di default chiama tante volte la read(), che è astratta. public int read(byte[] buf, int off, int len) throws IOException; Legge fino a riempire l'array buf, a partire dalla posizione off, con len byte (o fino alla fine dell'array). Si blocca se non ci sono abbastanza dati. Restituisce il numero di byte letti, o il valore -1 se incontra la fine dello stream. L'implementazione di default chiama tante volte la read(), che è astratta. public int available() throws IOException; Restituisce il numero di byte che possono essere letti senza bloccarsi (cioè che sono disponibili): con un file: quelli che rimangono da leggere fino alla fine del file; con una connessione di rete: anche 0, se dall'altra parte non è ancora stato mandato nulla. public void close() throws IOException; Chiude lo stream e rilascia le risorse ad esso associate. Eventuali dati non ancora letti vengono perduti. 5 8

9 1.2.2) Classe OutputStream ; % public OutputStream(); Vuoto. public abstract void write(int b) throws IOException; Scrive un byte (8 bit) sul canale di comunicazione. Il parametro è int (32 bit) per convenienza (il risultato di espressioni su byte è intero), ma solo gli 8 bit meno significativi sono scritti. public void write(byte[] buf) throws IOException; Scrive un array di byte. Blocca il chiamante finché la scrittura non è completata.. public void write(byte[] buf, int off, int len) throws IOException; Scrive la parte di array che inizia a posizione off, e consiste di len byte. Blocca il chiamante finché la scrittura non è completata.. public void flush() throws IOException; Scarica lo stream, scrivendo effettivamente tutti i dati eventualmente mantenuti in un buffer locale per ragioni di efficienza. Ciò deriva dal fatto che in generale si introduce molto overhead scrivendo pochi dati alla volta sul canale di comunicazione: su file: molte chiamate di sistema; su connessione di rete: un TPDU per pochi byte. public void close() throws IOException; Chiama flush() e poi chiude lo stream, liberando le risorse associate. Eventuali dati scritti prima della close() vengono comunque trasmessi, grazie alla chiamata di flush(). 9

10 $ / standard output $!!System;System.in System.out import java.io.*; public class InToOut { public static void main(string args[]) { int charread; try { while ((charread = System.in.read())!= -1) { System.out.write(charRead); System.out.println("");//Ignorare questa istruzione (ma non toglierla) catch (IOException e) { //non facciamo nulla! # 47< &=) > &?) 1,%,@ 1.2.3) Estensione della funzionalità degli Stream 2 3 ' "(, + 4! " FilterOutputStream OutputStream InputStream FilterInputStream Canale di comunicazione #% 10

11 $ # InputStreamOutputStream ) InputStreamOutputStream # write() write() OutputStream ) : OutputStream InputStream Stream di filtro Canale di Stream di filtro comunicazione!#& " ) Classe FilterInputStream ;InputStream % InputStream protected FilterInputStream(InputStream in); Crea uno stream di filtro attaccato a in. " protected InputStream in; Reference all'inputstream a cui è attaccato. 11

12 Gli stessi di InputStream. Di fatto l'implementazione di default non fa altro che chiamare i corrispondenti metodi dell'inputstream attaccato ) Classe FilterOutputStream ;OutputStream % OutputStream protected FilterOutputStream(OutputStream out); Crea uno stream di filtro attaccato a out. " protected OutputStream out; Reference all'outputstream a cui è attaccato. Gli stessi di OutputStream. Di fatto l'implementazione di default non fa altro che chiamare i corrispondenti metodi dell'outputstream attaccato ) BufferedInputStream e BufferedOutputStream * (, 12

13 BufferedOutputStream OutputStream InputStream BufferedInputStream Canale di comunicazione ##% ;!'=4! public BufferedInputStream(InputStream in); Crea un BufferedInputStream attaccato a in (con un buffer interno di 512 byte). public BufferedInputStream(InputStream in, int size); Secondo costruttore in cui si specifica la dimensione del buffer interno. public BufferedOutputStream (OutputStream out); Crea un BufferedOutputStream attaccato a out (con un buffer interno di 512 byte). public BufferedOutputStream (OutputStream out, int size); Secondo costruttore in cui si specifica la dimensione del buffer interno. Gli stessi degli stream da cui derivano. In più, BufferedOutputStream implementa il metodo flush() ) DataInputStream e DataOutputStream *! 3 13

14 3! &/ # htons()#-) htonl()#-) ntohs()#-) ntohl()#- intero (4 byte) writeint() DataOutputStream Byte separati in netw. byte order OutputStream byte più signif. InputStream Byte separati in netw. byte order DataInputStream readint() intero (4 byte) $#4DataInputStreamDataOutputStream public DataInputStream(InputStream in); Crea un DataInputStream attaccato a in. public DataOutputStream(OutputStream out); Crea un DataOutputStream attaccato a out. public writeboolean(boolean v) throws IOException; public boolean readboolean() throws IOException; public writebyte(int v) throws IOException; public byte readbyte()throws IOException; public writeshort(int v) throws IOException; public short readshort()throws IOException; public writeint(int v) throws IOException; byte più signif. 14

15 public int readint() throws IOException; public writelong(long v) throws IOException; public long readlong()throws IOException; public writefloat(float v) throws IOException; public float readfloat() throws IOException; public writedouble(double v) throws IOException; public double readdouble() throws IOException; public writechar(int v) throws IOException; public char readchar() throws IOException; Letture e scritture dei tipi di dati primitivi. public writechars(string s) throws IOException; Scrittura di una stringa. public String readline() throws IOException; Lettura di una linea di testo, terminata con CR, LF oppure CRLF ) PrintStream * $%& tostring() public PrintStream(OutputStream out); Crea un PrintStream attaccato a out. public PrintStream(OutputStream out, boolean autoflush); Se autoflush è impostato a true, lo stream effettua un flush() ogni volta che incontra la fine di una linea di testo (CR, LF oppure CR+LF). public void print(...) throws IOException; Il parametro può essere ogni tipo elementare, un array di caratteri, una stringa, un Object. 15

16 public void println(...) throws IOException; Il parametro può essere ogni tipo elementare, un array di caratteri, una stringa, un Object. println() dopo la scrittura va a linea nuova (appende CR, LF oppure CR+LF). Date Object print() PrintStream Byte... OutputStream "Friday, sep 27 01:20:15 EDT 1996" ; *% %#4PrintStream ) Esempi di uso degli stream di filtro. &&' % BufferedInputStreamBufferedOutputStream % FileOutputStream! File BufferedOutputStream FileOutputStream "prova.txt" (#A 2 " FileOutputStream!# 16

17 FileOutputStream filestream; BufferedOutputStream bufferedstream; filestream = new FileOutputStream("prova.txt"); bufferedstream = new BufferedOutputStream(fileStream); 2 " FileOutputStream # BufferedOutputStream bufferedstream; bufferedstream = new BufferedOutputStream(new FileOutputStream("prova.txt")); % FileOutputStream )'* % DataInputStream readline()!printstream println(...)! File "in.txt" FileInputStream DataInputStream readln() println(...) PrintStream FileOutputStream +#2 $%& File "out.txt" DataInputStream asciiin; PrintStream asciiout; asciiin = new DataInputStream(new FileInputStream("in.txt")); asciiout = new PrintStream(new FileOutputStream("out.txt")); 17

18 &&' ''* 4 PrintStream BufferedOutputStream FileOutputStream println(...) File PrintStream BufferedOutputStream FileOutputStream "out.txt" #% $%& PrintStream asciiout; asciiout = new PrintStream(new BufferedOutputStream( $ # new FileOutputStream("out.txt"))); DataInputStream asciiin; asciiin = new DataInputStream(new BufferedInputStream( 1.2.4) Tipi base di Stream new FileInputStream("in.txt"))); 2 InputStreamOutputStream 7 ) # ) 33 ) 18

19 Scritture FileOutputStream File FileInputStream Letture Scritture ByteArrayOutputStream RAM ByteArrayInputStream Letture Scritture SocketOutputStream SocketInputStream Letture # %SocketInputStreamSocketOutputStream InputStreamOutputStream 1.2.5) Stream per accesso a file 2 % # FileInputStream ) FileOutputStream 2 FileInputStream "! File FileInputStream #FileInputStream 19

20 public FileInputStream(String filename) throws IOException; public FileInputStream(File filename) throws IOException; Sono i più importanti. La classe File rappresenta un nome di file in modo indipendente dalla piattaforma, ed è di solito utilizzata in congiunzione con un FileDialog che permette all'utente la scelta di un file. Vedremo un esempio più avanti. Se si usa una stringa, essa può essere: Nome del file (il direttorio di lavoro è implicito); Path completo più nome del file. Tutti quelli di InputStream, più uno (getfd()) che non vedremo. 2 FileOutputStream %" FileOutputStream File #FileOutputStream public FileOutputStream(String filename) throws IOException; public FileOutputStream (File filename) throws IOException; Sono i più importanti. Per la classe File vale quanto detto sopra. Tutti quelli di OutputStream, più uno (getfd()) che non vedremo. % (, SecurityException 3! 20

21 $ TextArea TextArea!# B 2 BaseAppE3 6 % 21

22 import java.awt.*; public class BaseAppE3 extends Frame {...ecc. void button1_clicked(event event) { baseread = new BaseRead(textArea1, textarea2); baseread.readfile(); void button2_clicked(event event) { basewrite = new BaseWrite(textArea1, textarea2); basewrite.writefile(); 2 import java.awt.*; import java.io.*; public class BaseRead { TextArea commandarea, responsearea; DataInputStream is = null; public BaseRead(TextArea commandarea, TextArea responsearea) { this.commandarea = commandarea; this.responsearea = responsearea; try { is=new DataInputStream(new FileInputStream(commandArea.getText())); catch (Exception e) { responsearea.appendtext("exception" + "\n"); public void readfile() { String inputline; try { while ((inputline = is.readline())!= null) { responsearea.appendtext(inputline + "\n"); catch (IOException e) { responsearea.appendtext("io Exception" + "\n"); finally { try { is.close(); catch (IOException e) { responsearea.appendtext("io Exception" + "\n"); 22

23 import java.awt.*; import java.io.*; public class BaseWrite { TextArea commandarea, responsearea; PrintStream os = null; public BaseWrite(TextArea commandarea, TextArea responsearea) { this.commandarea = commandarea; this.responsearea = responsearea; try { os = new PrintStream(new FileOutputStream(commandArea.getText())); catch (Exception e) { responsearea.appendtext("exception" + "\n"); public void writefile() { os.print(responsearea.gettext()); os.close(); % FileDialog #... FileDialog opendialog = new FileDialog(null, "Titolo", FileDialog.LOAD); opendialog.show(); if (opendialog.getfile()!= null) {... is = new DataInputStream( new FileInputStream( newfile(opendialog.getdirectory(), opendialog.getfile()))); 23

24 ; #... FileDialog savedialog = new FileDialog(null, "Titolo", FileDialog.SAVE); savedialog.show(); if (savedialog.getfile()!= null) {... os = new PrintStream( new FileOutputStream( new File(saveDialog.getDirectory(), savedialog.getfile())); 1.2.6) Stream per accesso alla memoria ; ( # ByteArrayInputStream ByteArrayOutputStream ByteArrayInputStream 3 3! Buffer ByteArrayInputStream ##ByteArrayInputStream $# public ByteArrayInputStream (byte[] buf); Crea un ByteArrayInputStream, attaccato all'array buf, dal quale vengono poi letti i dati. 24

25 5InputStream= # EOF 3) reset() 3 ByteArrayOutputStream 33! " ByteArrayOutputStream Buffer $#ByteArrayOutputStream # public ByteArrayOutputStream(); Crea un ByteArrayOutputStream con una dimensione iniziale del buffer di 32 byte. Il buffer comunque cresce automaticamente secondo necessità. public ByteArrayOutputStream (int size); Crea un ByteArrayOutputStream con una dimensione iniziale di size byte. E' utile quando si voglia massimizzare l'efficienza e si conosca in anticipo la taglia dei dati da scrivere., OutputStream public void reset(); Ricomincia la scrittura dall'inizio, di fatto azzerando il buffer. public int size(); Restituisce il numero di byte contenuti (cioè scritti dopo l'ultima reset()) nel buffer. 25

26 public byte[] tobytearray(); Restituisce una copia dei byte contenuti nel buffer, che non viene resettato. public String tostring(); Restituisce una stringa che è una copia dei byte contenuti. L'array non viene resettato. public writeto(outputstream out) throws IOException; Scrive il contenuto del buffer sullo stream out. Il buffer non viene resettato. E' più efficiente che chiamare tobytearray() e scrivere quest'ultimo su out ) Stream per accesso a connessioni di rete + 3 / &' 4=' ': " & &' # 6 ) 9 ) B ) $ + # 6 ; # Socket# ) ServerSocket# ) 9 & Socket # InputStream 3) OutputStream 3) B &# InputStream) OutputStream) Socket! 26

27 ) Classe Socket 5 + " &'2 Socket &' % #! 4 Socket! public Socket(String host, int port) throws IOException; A noi basta questo (ce ne sono due). host è un nome DNS o un indirizzo IP in dotted decimal notation, e port è il numero di port sul quale deve esserci un processo server in ascolto. $ #... mysocket = new Socket("cesare.dsi.uniroma1.it", 80); mysocket = new Socket(" ", 80);... public InputStream getinputstream() throws IOException; Restituisce un InputStream per leggere i dati inviati dalla peer entity. public OutputStream getoutputstream() throws IOException; Restituisce un OutputStream per inviare i dati inviati dalla peer entity. public void close() throws IOException; Chiude il Socket (e quindi questa estremità della connessione TCP). public int getport() throws IOException; Restituisce il numero di port all'altra estremità della connessione. 27

28 public int getlocalport() throws IOException; Restituisce il numero di port di questa estremità della connessione. $ %-. $%& 2 # C&C) C%C) CDC) C&C % / $ 96*' EF 96G! 0' 28

29 %# H 2 BaseAppE4 6 % 29

30 import java.awt.*; public class BaseAppE4 extends Frame {...ecc. void button1_clicked(event event) { baseconn = new BaseConn(textField1.getText(), textfield2.gettext(), textarea1, textarea2); void button2_clicked(event event) { baseconn.send(); void button3_clicked(event event) { baseconn.receive(); void button4_clicked(event event) { baseconn.close(); 2 import java.awt.*; import java.lang.*; import java.io.*; import java.net.*; public class BaseConn { TextArea commandarea, responsearea; Socket socket = null; PrintStream os = null; DataInputStream is = null; public BaseConn(String host, String port, TextArea commandarea, TextArea responsearea) { this.commandarea = commandarea; this.responsearea = responsearea; try { socket = new Socket(host, Integer.parseInt(port)); os = new PrintStream(socket.getOutputStream()); is = new DataInputStream(socket.getInputStream()); responsearea.appendtext("***connection established" + "\n"); catch (Exception e) { responsearea.appendtext("exception" + "\n"); public void send() { os.println(commandarea.gettext()); public void receive() { String inputline; try { inputline = is.readline(); responsearea.appendtext(inputline + "\n"); 30

31 catch (IOException e) { responsearea.appendtext("io Exception" + "\n"); public void close() { try { is.close(); os.close(); socket.close(); responsearea.appendtext("***connection closed" + "\n"); catch (IOException e) { responsearea.appendtext("io Exception" + "\n"); ) Classe ServerSocket ServerSocket C C 5 ServerSocket Socket " = Socket 31

32 Fase di stabilimento della connessione C lient Server New Socket() ServerSocket Connessione stabilita C lient ServerSocket Server OutputStream InputStream Socket Socket OutputStream InputStream (#& ServerSocket public ServerSocket(int port) throws IOException; A noi basta questo (ce ne sono due). port è il numero del port sul quale il ServerSocket si mette in ascolto. public Socket accept() throws IOException; 32

33 Questo metodo blocca il chiamante finché qualcuno non cerca di connettersi. Quando questo succede, il metodo ritorna restituendo un Socket che rappresenta l'estremità locale della connessione. public void close() throws IOException; Chiude il ServerSocket (e quindi non ci sarà più nessuno in ascolto su quel port). public int getlocalport() throws IOException; Restituisce il numero di port su cui il ServerSocket è in ascolto.! % %# IFFF) &/ import java.io.*; import java.net.*; public class SimpleServer { public static void main(string args[]) { ServerSocket server; Socket client; String inputline; DataInputStream is = null; PrintStream os = null; try { server = new ServerSocket(5000); System.out.println("Accepting one connection..."); client = server.accept(); server.close(); System.out.println("Connection from one client accepted."); is = new DataInputStream(client.getInputStream()); os = new PrintStream(client.getOutputStream()); os.println("from SimpleServer: Welcome!"); while ((inputline = is.readline())!= null) { System.out.println("Received: " + inputline); os.println("from SimpleServer: " + inputline); is.close(); os.close(); client.close(); System.out.println("Connection closed."); catch (IOException e) { e.printstacktrace(); 33

34 % # #/ CDC! " ) #/ / '! 1.3) Multithreading + &/ 2 + Thread,!! % main() main() 1.3.1) Classe Thread ; & Runnable! public Thread(); public Thread(String name); public Thread(Runnable target); 34

35 &! # public static void sleep(long millis) throws InterruptedException; Questo metodo mette a dormire il thread corrente per millis millisecondi. In questo periodo, altri thread possono avanzare nell'esecuzione. Se in questo tempo qualcun altro chiama il suo metodo interrupt(), il thread viene risvegliato da una InterruptedException. public static void yield() throws InterruptedException; Questo metodo fa si che il thread corrente ceda la Cpu ad altri thread in attesa. Poiché l'ambiente Java non può garantire la preemption (essa dipende dal sistema operativo) è consigliabile usarlo, quando un thread deve effettuare lunghe computazioni, a intervalli regolari.!# public synchronized void start() throws IllegalThreadStateException; E' il metodo che si deve chiamare per far partire un thread, una volta creato; è un errore chiamarlo su un thread già avviato. public void run(); E' il metodo che l'ambiente runtime chiama quando un thread viene avviato con il metodo start(). costituisce il corpo eseguibile del thread, e determina il suo comportamento. Quando esso finisce, il thread termina. E' dunque il metodo che ogni classe derivata da Thread deve ridefinire. public void stop(); Termina il thread. public void suspend(); Sospende il thread; altri possono eseguire. public void resume(); Rende il thread nuovamente eseguibile, cioè ready (Nota: questo non significa che diventi anche running, in quanto ciò dipende anche da altri fattori). 35

36 " # ' import java.io.*; import java.lang.*; public class PingPong extends Thread { String word; int delay; public PingPong (String whattosay, int delaytime) { word = whattosay; delay = delaytime; public void run () { try { while (true) { System.out.println(word); sleep(delay); catch (InterruptedException e) { return; public static void main(string args[]) { new PingPong("ping", 250).start(); //1/4 sec. new PingPong("PONG", 100).start(); //1/10 sec ) Interfaccia Runnable. Thread :# " / Thread!) Thread 2 Runnable # public abstract void run(); 36

37 # A # public MyClass implements Runnable {... run()# public abstract void run(){... " Thread start() run() #... new Thread(theRunnableObject).start();... $ * " Runnable import java.io.*; import java.lang.*; public class RPingPong /*extends AnotherClass*/ implements Runnable { String word; int delay; public RPingPong (String whattosay, int delaytime) { word = whattosay; delay = delaytime; public void run () { try { while (true) { System.out.println(word); Thread.sleep(delay); catch (InterruptedException e) { return; 37

38 public static void main(string args[]) { Runnable ping = new RPingPong("ping", 100); //1/10 sec. Runnable PONG = new RPingPong("PONG", 100); //1/10 sec. new Thread(ping).start(); new Thread(ping).start(); new Thread(PONG).start(); new Thread(PONG).start(); new Thread(PONG).start(); new Thread(PONG).start(); new Thread(PONG).start(); % $ H2 # 2 BaseAppE8 H % CDC import java.awt.*; public class BaseAppE8 extends Frame {...ecc. void button1_clicked(event event) { basetconn = new BaseTConn(textField1.getText(), textfield2.gettext(), textarea1, textarea2); void button2_clicked(event event) { basetconn.send(); void button3_clicked(event event) { basetconn.close(); 2 run() 38

39 import java.awt.*; import java.lang.*; import java.io.*; import java.net.*; public class BaseTConn implements Runnable { TextArea commandarea, responsearea; Socket socket = null; PrintStream os = null; DataInputStream is = null; public BaseTConn(String host, String port, TextArea commandarea, TextArea responsearea) { this.commandarea = commandarea; this.responsearea = responsearea; try { socket = new Socket(host, Integer.parseInt(port)); os = new PrintStream(socket.getOutputStream()); is = new DataInputStream(socket.getInputStream()); responsearea.appendtext("***connection established" + "\n"); new Thread(this).start(); catch (Exception e) { responsearea.appendtext("exception" + "\n"); public void run() { String inputline; try { while ((inputline = is.readline())!= null) { responsearea.appendtext(inputline + "\n"); catch (IOException e) { responsearea.appendtext("io Exception" + "\n"); public void send() { os.println(commandarea.gettext()); public void close() { try { is.close(); os.close(); socket.close(); responsearea.appendtext("***connection closed" + "\n"); catch (IOException e) { responsearea.appendtext("io Exception" + "\n"); 39

40 1.4 Sincronizzazione & + # Thread ) Runnable ' + Object! " 1.4.1) Metodi sincronizzati " # public void synchronized amethod(...) {... 5! 7 / : % " / % =# ) 40

41 $ # public class Account { private double balance; public Account(double initialdeposit) { balance = initialdeposit; public synchronized double getbalance() { return balance; public synchronized void deposit(double amount) { balance += amount; 7/ % : $ ) Istruzioni sincronizzate ; &/ #... synchronized(anobject) {... // istruzioni sincronizzate

42 ( $ # ) / &! '/ E# 2 ChatServer IFFF ChatHandler import java.net.*; import java.io.*; import java.util.*; public class ChatServer { public ChatServer() throws IOException { ServerSocket server = new ServerSocket(5000); System.out.println ("Accepting connections..."); while(true) { Socket client = server.accept(); System.out.println ("Accepted from " + client.getinetaddress()); new ChatHandler(client).start(); public static void main(string args[]) throws IOException { new ChatServer(); 2 import java.net.*; import java.io.*; import java.util.*; public class ChatHandler extends Thread { protected static Vector handlers = new Vector(); protected String username; protected Socket socket; protected DataInputStream is; protected PrintStream os; 42

43 public ChatHandler(Socket socket) throws IOException { this.socket = socket; is = new DataInputStream(new BufferedInputStream(socket.getInputStream())); os = new PrintStream(new BufferedOutputStream(socket.getOutputStream())); public void run() { try { username = is.readline(); os.println("salve " + username + ", benvenuto nella chatline di Reti II"); os.flush(); broadcast(this, "Salve a tutti! Ci sono anch'io."); handlers.addelement(this); //e' un metodo sincronizzato while (true) { String msg = is.readline(); if (msg!= null) broadcast(this, msg); else break; catch(ioexception ex) { ex.printstacktrace(); finally { handlers.removeelement(this); //e' un metodo sincronizzato broadcast(this, "Arrivederci a presto."); try { socket.close(); catch(exception ex) { ex.printstacktrace(); protected static void broadcast(chathandler sender, String message) { synchronized (handlers) { //ora nessuno puo' aggiungersi o abbandonare Enumeration e = handlers.elements(); while (e.hasmoreelements()) { ChatHandler c = (ChatHandler) e.nextelement(); try { c.os.print("da " + sender.username); c.os.print("@" + sender.socket.getinetaddress().gethostname() + ": "); c.os.println(message); c.os.flush(); catch(exception ex) { c.stop(); 43

44 1.4.3) Wait() e Notify() + ;,J # public final void wait() throws InterruptedException; Un thread che chiama questo metodo di un oggetto viene sospeso finché un altro thread non chiama notify() o notifyall() su quello stesso oggetto. Il lucchetto su quell'oggetto viene temporaneamente e atomicamente rilasciato, così altri thread possono entrare. public final void notify() throws IllegalMonitorStateException; Questo metodo, chiamato su un oggetto, risveglia un thread (quello in attesa da più tempo) fra quelli sospesi dentro quell'oggetto. In particolare, tale thread riprenderà l'esecuzione solo quando il thread che ha chiamato notify() rilascia il lucchetto sull'oggetto. public final void notifyall() throws IllegalMonitorStateException; Questo metodo, chiamato su un oggetto, risveglia tutti i thread sospesi su quell'oggetto. Naturalmente, quando il chiamante rilascerà il lucchetto, solo uno dei risvegliati riuscirà a conquistarlo e gli altri verranno nuovamente sospesi. ; # ) + ; wait()notify()2 Consumer! Vector 4 wait() main()! notify() 44

45 import java.util.*; import java.io.*; public class Consumer extends Thread { protected Vector objects; public Consumer () { objects = new Vector(); public void run () { while (true) { Object object = extract (); System.out.println (object); protected Object extract () { synchronized (objects) { while (objects.isempty ()) { try { objects.wait (); catch (InterruptedException ex) { ex.printstacktrace (); Object o = objects.firstelement (); objects.removeelement (o); return o; public void insert (Object o) { synchronized (objects) { objects.addelement (o); objects.notify (); public static void main (String args[]) throws IOException, InterruptedException { Consumer c = new Consumer (); c.start (); DataInputStream i = new DataInputStream (System.in); String s; while ((s = i.readline ())!= null) { c.insert (s); Thread.sleep (1000); KL. 45

Lettura e scrittura - Stream

Lettura e scrittura - Stream Lettura e scrittura - Stream Obiettivo(fine della lezione): leggere/scrivere da/su file (e quindi verso qualsiasi dispositivo)! Tipi di stream " Stream di caratteri " Stream di byte! Classi astratte che

Dettagli

Jav@Lab Il linguaggio Java I file sequenziali

Jav@Lab Il linguaggio Java I file sequenziali Jav@Lab Il linguaggio Java I file sequenziali Input e Output Secondo i canoni dei linguaggi di programmazione "procedurali" il concetto di input e output è strettamente legato al tipo di dispositivo esterno

Dettagli

Sockets in Java. Lorenzo Gallucci

Sockets in Java. Lorenzo Gallucci Sockets in Java Lorenzo Gallucci Sockets La libreria Java dispone di un API per la gestione dell I/O di rete Il package di riferimento è java.net Vari compiti: Gestione dell I/O su socket (sia TCP che

Dettagli

Un flusso (stream) è una astrazione che produce e/o consuma informazioni.

Un flusso (stream) è una astrazione che produce e/o consuma informazioni. I programmi Java eseguono l I/O mediante i flussi. Un flusso (stream) è una astrazione che produce e/o consuma informazioni. Ogni flusso è collegato ad un dispositivo fisico dal sistema di I/O di java.

Dettagli

Corso di Reti di Calcolatori L-A

Corso di Reti di Calcolatori L-A Università degli Studi di Bologna Facoltà di Ingegneria Corso di Reti di Calcolatori L-A Esercitazione 2 (svolta) Socket Java con connessione Luca Foschini Anno accademico 2009/2010 Esercitazione 2 1 Architettura

Dettagli

Architettura Client-Server

Architettura Client-Server Architettura Client-Server 1. il client manda una richiesta al server 2. il server (in attesa) riceve la richiesta 3. il server esegue il servizio richiesto (generando un thread concorrente) 4. il server

Dettagli

Sincronizzazione con Java

Sincronizzazione con Java Sincronizzazione con Java Corse critiche e sincronizzazione Java implementa un meccanismo simile al monitor per garantire la sincronizzazione fra thread Ogni oggetto ha un lock associato ad esso Nelle

Dettagli

Chat. Si ha un server in ascolto sulla porta 4444. Quando un client richiede la connessione, il server risponde con: Connessione accettata.

Chat. Si ha un server in ascolto sulla porta 4444. Quando un client richiede la connessione, il server risponde con: Connessione accettata. Chat Si ha un server in ascolto sulla porta 4444 Quando un client richiede la connessione, il server risponde con: Connessione accettata. Nome: Il client deve rispondere con lo user name A questo punto

Dettagli

THREAD. Programmazione in rete e laboratorio. Come si crea un thread

THREAD. Programmazione in rete e laboratorio. Come si crea un thread Programmazione in rete e laboratorio JAVA - Thread Alberto Martelli THREAD Thread: flusso sequenziale di controllo (esecuzione di istruzioni) in un programma. Nello stesso programma si possono far partire

Dettagli

Creazione, eliminazione, lettura e scrittura di file di testo

Creazione, eliminazione, lettura e scrittura di file di testo Creazione, eliminazione, lettura e scrittura di file di testo Java mette a disposizione degli sviluppatori diverse classi per lavorare con i file di testo, analizziamo le principali: java.io.file La classe

Dettagli

Fondamenti di Informatica C Esercitazioni di Laboratorio / 4 Outline

Fondamenti di Informatica C Esercitazioni di Laboratorio / 4  Outline Fondamenti di Informatica C Esercitazioni di Laboratorio / 4 http://polaris.ing.unimo.it/fic/laboratorio.html Ing. Francesco De Mola demola.francesco@unimore.it DII, Modena Via Vignolese (lab. Dottorandi

Dettagli

RETI DI CALCOLATORI Linguaggio Java: Il Package di Input Output

RETI DI CALCOLATORI Linguaggio Java: Il Package di Input Output Università degli Studi di Modena e Reggio Emilia Facoltà di Ingegneria CORSO DI RETI DI CALCOLATORI Linguaggio Java: Il Package di Input Output Prof. Franco Zambonelli Lucidi realizzati in collaborazione

Dettagli

Creazione, eliminazione, lettura e scrittura di file di testo

Creazione, eliminazione, lettura e scrittura di file di testo Creazione, eliminazione, lettura e scrittura di file di testo Creazione Java mette a disposizione degli sviluppatori diverse classi per lavorare con i file di testo, analizziamo le principali: java.io.file

Dettagli

Laboratorio Reti di Calcolatori Laurea Triennale in Comunicazione Digitale. Anno Accademico 2012/2013

Laboratorio Reti di Calcolatori Laurea Triennale in Comunicazione Digitale. Anno Accademico 2012/2013 Laboratorio Reti di Calcolatori Laurea Triennale in Comunicazione Digitale Anno Accademico 2012/2013 Streams Maggior parte della programmazione di rete è eseguire operazione di input e output. Sposto byte

Dettagli

Gestione di file in Java

Gestione di file in Java CAPITOLO 17 Gestione di file in Java Ogni insieme di informazioni residenti su memoria di massa costituisce in Java un flusso di dati che è denominato stream. Più in particolare un input stream costituisce

Dettagli

Unità 2 I file binari

Unità 2 I file binari Dare una breve descrizione dei termini introdotti: (A) CONOSCENZA TERMINOLOGICA file binari file di tipi primitivi file di oggetti serializzazione (B) CONOSCENZA E COMPETENZA Rispondere alle seguenti domande

Dettagli

Tecnologie Web L-A. Java e HTTP. Dario Bottazzi Tel. 051 2093541, E-Mail: dario.bottazzi@unibo.it, SkypeID: dariobottazzi. Java e TCP/IP in a Nutshell

Tecnologie Web L-A. Java e HTTP. Dario Bottazzi Tel. 051 2093541, E-Mail: dario.bottazzi@unibo.it, SkypeID: dariobottazzi. Java e TCP/IP in a Nutshell Tecnologie Web L-A Java e HTTP Dario Bottazzi Tel. 051 2093541, E-Mail: dario.bottazzi@unibo.it, SkypeID: dariobottazzi Java e TCP/IP in a Nutshell! java.net.inetaddress: rappresenta un indirizzo IP e

Dettagli

Esercitazioni Ingegneria del So2ware 3 - Programmazione Java Excep<ons, I/O

Esercitazioni Ingegneria del So2ware 3 - Programmazione Java Excep<ons, I/O Esercitazioni Ingegneria del So2ware 3 - Programmazione Java Excep

Dettagli

Connessioni di rete. Progetto di reti di Calcolatori e Sistemi Informatici - Stefano Millozzi. PdR_09010 - Stefano Millozzi

Connessioni di rete. Progetto di reti di Calcolatori e Sistemi Informatici - Stefano Millozzi. PdR_09010 - Stefano Millozzi Connessioni di rete Progetto di reti di Calcolatori e Sistemi Informatici - Stefano Millozzi 1 Socket orientato alla connessione o non orientato alla connessione 2 Socket in astratto 3 Socket modalità

Dettagli

MagiCum S.r.l. Progetto Inno-School

MagiCum S.r.l. Progetto Inno-School MagiCum S.r.l. Progetto Inno-School Area Sviluppo Web Autore: Alessio Bernardo Revisione: 1 Data: 23/05/13 Titolo: Sviluppo piattaforma e-learning e sviluppo siti web File: Documentazione tecnica Sito:

Dettagli

Flussi, lettori e scrittori

Flussi, lettori e scrittori Flussi, lettori e scrittori Per sequenze di byte, InputStream, OutputStream e loro sottoclassi. Es: InputStream in = ; int next = in. read(); if (next!= -1) byte b = (byte) next; Per sequenze di caratteri,

Dettagli

Programmazione concorrente in Java

Programmazione concorrente in Java Programmazione concorrente in Java Multithreading in Java Ogni thread e un oggetto, creato come istanza della classe java.lang.thread La classe Thread contiene tutti i metodi per gestire i threads L utente

Dettagli

R.Focardi Laboratorio di Ingegneria del Software 6. 1

R.Focardi Laboratorio di Ingegneria del Software 6. 1 Networking Java permette comunicazioni in rete basate sul concetto di socket, che permette di vedere la comunicazione in termini di flusso (stream), in modo analogo all input-output di file, usando Stream

Dettagli

Lezione n.7 LPR -Informatica applicata Socket e Datagram UDP. 11/4/2013 Laura Ricci

Lezione n.7 LPR -Informatica applicata Socket e Datagram UDP. 11/4/2013 Laura Ricci Università degli Studi di Pisa Lezione n.7 LPR -Informatica applicata Socket e Datagram UDP 11/4/2013 Laura Ricci Laura Ricci 1 COMUNICAZIONE CONNECTION ORIENTED VS. CONNECTIONLESS Comunicazione Connection

Dettagli

Laboratorio di Programmazione di Rete Corso A

Laboratorio di Programmazione di Rete Corso A Laboratorio di Programmazione di Rete Corso A Anno Accademico 2005-2006 Docente: Laura Ricci Assistente: Paolo Mori INFORMAZIONI UTILI Orario del Corso: Lunedì 9.00-11.00 Laboratorio Gruppo A 11.00-13.00

Dettagli

Lezione n.3 LPR - Informatica Applicata

Lezione n.3 LPR - Informatica Applicata Lezione n.3 LPR - Informatica Applicata Il Protocollo TCP: 7/3/2013 Laura Ricci Laura Ricci 1 IL PARADIGMA CLIENT/SERVER La tipica applicazione Internet provede due processi in esecuzione su due host geograficamente

Dettagli

20/12/2010. Package java.net (Socket ServerSocket) Package java.rmi (uso di oggetti remoti)

20/12/2010. Package java.net (Socket ServerSocket) Package java.rmi (uso di oggetti remoti) Package java.net (Socket ServerSocket) Package java.rmi (uso di oggetti remoti) La classe URL cattura il concetto di indirizzo Internet (URL) nella forma standard: http://localhost/index.html file:///autoexec.bat

Dettagli

Esercitazione 15. Il problema dello Sleeping Barber

Esercitazione 15. Il problema dello Sleeping Barber Università degli Studi della Calabria Corso di Laurea in Ingegneria Informatica A.A. 2001/2002 Sistemi Operativi Corsi A e B Esercitazione 15 Il problema dello Sleeping Barber E dato un salone di barbiere,

Dettagli

Programmazione concorrente con il linguaggio Java

Programmazione concorrente con il linguaggio Java Programmazione concorrente con il linguaggio Java Thread, Mutua Esclusione e Sincronizzazione Alcuni aspetti architetturali e di prestazioni Concetto di thread Un thread è un flusso di esecuzione indipendente

Dettagli

Protocolli Internet. Canale di comunicazione. canale di comunicazione

Protocolli Internet. Canale di comunicazione. canale di comunicazione Network Programming Java Programming Language Livelli di middleware Applicazioni e servizi RMI send, receive, read, write serializzazione UDP e TCP Rete 2 Protocolli Internet Un processo è definito da

Dettagli

Introduzione. Java. Streams. Streams

Introduzione. Java. Streams. Streams Java il sistema di I/O G. Prencipe prencipe@di.unipi.it Introduzione La gestione del sistema di I/O è una parte fondamentale di qualsiasi linguaggio di programmazione In questa lezione approfondiremo la

Dettagli

Corso di Reti di Calcolatori

Corso di Reti di Calcolatori Corso di Reti di Calcolatori UNICAL Facoltà di Ingegneria a.a. 2002/2003 Esercitazione sul networking in Java (3 a parte) e comandi di rete paolo.trunfio@deis.unical.it 1 Datagrammi Le applicazioni che

Dettagli

ProgettAzione tecnologie in movimento - V anno Unità 4 - Realizzare applicazioni per la comunicazione in rete

ProgettAzione tecnologie in movimento - V anno Unità 4 - Realizzare applicazioni per la comunicazione in rete ProgettAzione tecnologie in movimento - V anno Unità 4 - Realizzare applicazioni per la comunicazione in rete Compito in classe proposto Realizzare un applicazione C/S per trasferire al Client il contenuto

Dettagli

Corso di Reti di Calcolatori. Datagrammi

Corso di Reti di Calcolatori. Datagrammi Corso di Reti di Calcolatori UNICAL Facoltà di Ingegneria a.a. 2002/2003 Esercitazione sul networking in Java (3 a parte) e comandi di rete paolo.trunfio@deis.unical.it 1 Datagrammi Le applicazioni che

Dettagli

JAVA INTRODUZIONE C++ JDK e JRE API IDE (BLUEJ) JAVA Introduzione. Versioni e IDE DIAPOSITIVA 2 ALESSANDRO URSOMANDO

JAVA INTRODUZIONE C++ JDK e JRE API IDE (BLUEJ) JAVA Introduzione. Versioni e IDE DIAPOSITIVA 2 ALESSANDRO URSOMANDO JAVA JAVA Introduzione INTRODUZIONE C++ JDK e JRE API IDE (BLUEJ) Cross Platform Web Dinamico Versioni e IDE DIAPOSITIVA 2 1 JAVA La programmazione orientata agli oggetti JAVA La programmazione OOP Nascita

Dettagli

Gestione dei thread in Java LSO 2008

Gestione dei thread in Java LSO 2008 Gestione dei thread in Java LSO 2008 Cos è un Thread? Si può avere la necessità di suddividere un programma in sottoattività separate da eseguire indipendentemente l una dall altra Queste sottoattività

Dettagli

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Autore: Prof. Agostino Sorbara ITIS "M. M.

Dettagli

Organizzazione della lezione. Lezione 10 Interprocess Communication in Java. Gli obiettivi del middleware. Middleware

Organizzazione della lezione. Lezione 10 Interprocess Communication in Java. Gli obiettivi del middleware. Middleware Organizzazione della lezione Lezione 10 Interprocess Communication in Java Vittorio Scarano Corso di Programmazione Distribuita (2003-2004) Laurea di I livello in Informatica Università degli Studi di

Dettagli

Programmazione 2. Input Output su Stream e File

Programmazione 2. Input Output su Stream e File Programmazione 2 Input Output su Stream e File Stream In generale ogni programma ha un flusso (stream) di dati in input ed uno in output. Stream di input Stream di output Input/Output in Java Il package

Dettagli

T 1. Per un processo con più thread di controllo, lo stato di avanzamento della computazione di ogni thread è dato da:

T 1. Per un processo con più thread di controllo, lo stato di avanzamento della computazione di ogni thread è dato da: Un thread (o processo leggero) è una attività, descritta da una sequenza di istruzioni, che esegue all'interno del contesto di esecuzione di un programma. Un thread procede nella sua esecuzione per portare

Dettagli

Laboratorio di reti I: Java IO

Laboratorio di reti I: Java IO Laboratorio di reti I: Java IO Stefano Brocchi brocchi@dsi.unifi.it 15 ottobre, 2008 Stefano Brocchi Laboratorio di reti I: Java IO 15 ottobre, 2008 1 / 28 Gli InputStream e gli OutputStream Gli stream

Dettagli

Con il pulsante Start si introducono palline che rimbalzano in un area di disegno fino a che non è terminato il loro ciclo di vita (1000 movimenti).

Con il pulsante Start si introducono palline che rimbalzano in un area di disegno fino a che non è terminato il loro ciclo di vita (1000 movimenti). Rimbalzi. import java.awt.*; import java.awt.event.*; import java.applet.applet; public class Bounce extends Applet implements ActionListener { private Canvas canvas; private Button b1; private Button

Dettagli

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRVWUHDP

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRVWUHDP (VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRVWUHDP D (FKR&OLHQWH6HUYHU Sviluppare un applicazione C/S in cui: il server attende una connessione da parte del client (su MDYDQHW6HUYHU6RFNHW), usa la

Dettagli

789:;<:' .&+/"0&12%34%5&66+,("%3787%% %"+&%88$77%9%8:$:7%% ;<'&12%8%=,+>"%3787 % % % %"+&%88$77%9%8:$:7%

789:;<:' .&+/0&12%34%5&66+,(%3787%% %+&%88$77%9%8:$:7%% ;<'&12%8%=,+>%3787 % % % %+&%88$77%9%8:$:7% !"#$"%&'()')*+'!"#$%!&'()%*&++,+&-%%!"#$%&'"(()("*+,#$'"&$-. 789:;"%3787 % % % %"+&%88$77%9%8:$:7%?("'(%)"'"%'&0% 0,6"+,@"+("%1(%A'5"+=,B/,%C+,'1&$%

Dettagli

Programmazione di rete in Java

Programmazione di rete in Java Programmazione di rete in Java Reti di calcolatori Una rete di calcolatori è un sistema che permette la condivisione di dati informativi e risorse (sia hardware sia software) tra diversi calcolatori. Lo

Dettagli

L input da tastiera in Java. Dott. Ing. M. Banci, PhD

L input da tastiera in Java. Dott. Ing. M. Banci, PhD L input da tastiera in Java Dott. Ing. M. Banci, PhD La lettura di un flusso di input in Java avviene attraverso l'oggetto in della classe System. System.in appartiene alla classe InputStream (letteralmente

Dettagli

Applicazioni web. Parte 5 Socket

Applicazioni web. Parte 5 Socket Agent and Object Technology Lab Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma Applicazioni web Parte 5 Michele Tomaiuolo tomamic@ce.unipr.it Protocolli Internet I computer

Dettagli

RETI DI CALCOLATORI Linguaggio Java: Eccezioni

RETI DI CALCOLATORI Linguaggio Java: Eccezioni Università degli Studi di Modena e Reggio Emilia Facoltà di Ingegneria Reggio Emilia CORSO DI RETI DI CALCOLATORI Linguaggio Java: Eccezioni Prof. Franco Zambonelli Lucidi realizzati in collaborazione

Dettagli

Multithreading in Java. Fondamenti di Sistemi Informativi 2014-2015

Multithreading in Java. Fondamenti di Sistemi Informativi 2014-2015 Multithreading in Java Fondamenti di Sistemi Informativi 2014-2015 Multithreading La programmazione concorrente consente di eseguire più processi o thread nello stesso momento. Nel secondo caso si parla

Dettagli

Parte II: Reti di calcolatori Lezione 12

Parte II: Reti di calcolatori Lezione 12 Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2014-15 Parte II: Reti di calcolatori Lezione 12 Giovedì 16-04-2015 1 Confronto architetture C/S e

Dettagli

Riferimenti ad oggetti: Fondamenti di Informatica L-B Esercitazione n 4 Java: I/O, Costruttori e altro. Riferimenti ad oggetti: (Esempio)

Riferimenti ad oggetti: Fondamenti di Informatica L-B Esercitazione n 4 Java: I/O, Costruttori e altro. Riferimenti ad oggetti: (Esempio) Fondamenti di Informatica L-B Esercitazione n 4 Java: I/O, Costruttori e altro A.A. 2005/06 Tutor: Loris Cancellieri loris.cancellieri@studio.unibo.it Riferimenti ad oggetti: Cosa si può fare con i riferimenti?

Dettagli

20 - Input/Output su File

20 - Input/Output su File 20 - Input/Output su File Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it

Dettagli

SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica

SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica Esercitazioni di PROGETTAZIONE DEL SOFTWARE (Corsi di Laurea in Ingegneria Informatica ed Automatica ed Ingegneria

Dettagli

RMI e Firewall. Una soluzione è offerta dal transport layer di RMI stesso

RMI e Firewall. Una soluzione è offerta dal transport layer di RMI stesso Firewall Ogni applicazione di rete, che opera fuori da quelli che sono i confini di una rete locale, incontra inevitabilmente i cosiddetti firewall Tipicamente i firewall bloccano tutto il traffico di

Dettagli

Modello client-server

Modello client-server Modello -server Il server fornisce servizi sulla rete Viene eseguita l applicazione server su un host L applicazione attende connessioni dalla rete Il usufruisce del servizio attraverso la rete Deve conoscere

Dettagli

Datagrammi. NOTA: MulticastSocket estende DatagramSocket

Datagrammi. NOTA: MulticastSocket estende DatagramSocket Datagrammi Le applicazioni che comunicano tramite socket possiedono un canale di comunicazione dedicato. Per comunicare, un client ed un server stabiliscono una connessione, trasmettono dati, quindi chiudono

Dettagli

Restrizioni per la sicurezza

Restrizioni per la sicurezza Applets Applet = programma Java che può essere invocato all interno di un file.html ed eseguito da un browser web, es. C:\Files> explorer MioFile.html un appletviewer, es. C:\Files> appletviewer MioFile.html

Dettagli

Università degli Studi di Modena e Reggio Emilia. Facoltà di Ingegneria Reggio Emilia CORSO DI TECNOLOGIE E APPLICAZIONI WEB. Http con java, URL

Università degli Studi di Modena e Reggio Emilia. Facoltà di Ingegneria Reggio Emilia CORSO DI TECNOLOGIE E APPLICAZIONI WEB. Http con java, URL Università degli Studi di Modena e Reggio Emilia Facoltà di Ingegneria Reggio Emilia CORSO DI TECNOLOGIE E APPLICAZIONI WEB Http con java, URL Ing. Marco Mamei Anno Accademico 2004-2005 M. Mamei - Tecnologie

Dettagli

Corso di Programmazione Concorrente. Java Thread. Valter Crescenzi http://crescenzi.dia.uniroma3.it

Corso di Programmazione Concorrente. Java Thread. Valter Crescenzi http://crescenzi.dia.uniroma3.it Corso di Programmazione Concorrente Java Thread Valter Crescenzi http://crescenzi.dia.uniroma3.it Sommario Java Thread e supporto alla PC della piattaforma Java Creazione di Thread con java.lang.thread

Dettagli

Sviluppo Applicazioni Mobile Lezione 13. Dr. Paolo Casoto, Ph.D - 2012

Sviluppo Applicazioni Mobile Lezione 13. Dr. Paolo Casoto, Ph.D - 2012 + Sviluppo Applicazioni Mobile Lezione 13 + Credits I lucidi di questa lezione sono stati preparati da: Professor Stefano Mizzaro Professor Paolo Coppola e sono stati modificati e completati dal Dr. Paolo

Dettagli

Parte II: Reti di calcolatori Lezione 10

Parte II: Reti di calcolatori Lezione 10 Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2013-14 Pietro Frasca Parte II: Reti di calcolatori Lezione 10 Giovedì 3-04-2014 1 Reti per la distribuzione

Dettagli

Laboratorio di reti I: Il pacchetto java.net

Laboratorio di reti I: Il pacchetto java.net Laboratorio di reti I: Il pacchetto java.net Stefano Brocchi brocchi@dsi.unifi.it 5 novembre, 2008 Stefano Brocchi Laboratorio di reti I: Il pacchetto java.net 5 novembre, 2008 1 / 43 Concetti di base

Dettagli

Operazioni di scrittura e lettura con periferici in linguaggio Java

Operazioni di scrittura e lettura con periferici in linguaggio Java Operazioni di scrittura e lettura con periferici in linguaggio Java Flussi logici (stream) di output Operazione di scrittura a monitor con uso di stream (flusso logico) di output RAM System.out.println

Dettagli

Synchronized (ancora)

Synchronized (ancora) Synchronized (ancora) Riscriviamo l esempio di prima. Usiamo una struttura modulare, con una classe Notificatore che ha opportuni metodi. La classe ha due campi privati, la lista buftext e un suo thread.

Dettagli

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale Fondamenti di Informatica IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale Fondamenti di Informatica - D. Talia - UNICAL 1 Lettura di dati da input In Java la lettura di dati da input

Dettagli

Programmazione Concorrente in Java

Programmazione Concorrente in Java Programmazione Concorrente in Java Lorenzo Bettini Dip. Sistemi e Informatica, Univ. Firenze http://www.dsi.unifi.it/~bettini Ottobre 2005 Gestione dei Processi Un processo è un programma in esecuzione.

Dettagli

Input/Output in Java

Input/Output in Java Corso Java Input/Output in Java Docente: Dott. Marco Bianchi Slide realizzate da Ing. A.Bei, Dott. M.Bianchi, Dott. F.Lombardi Input/Output in Java Per effettuare operazioni di I/O in Java è possibile

Dettagli

Eccezioni. Comportamento di default (esempio) Propagazione delle eccezioni

Eccezioni. Comportamento di default (esempio) Propagazione delle eccezioni Università degli Studi di Roma La Sapienza Corso di Laurea in Ingegneria dell Informazione (sede di Latina) Corso di Laurea in Ingegneria dell Informazione (consorzio Nettuno) Eccezioni L esistenza di

Dettagli

LPR A 2005/2006 Lezione 4

LPR A 2005/2006 Lezione 4 LPR A 2005/2006 Lezione 4 JAVA invio invio streams di dati di tipo primitivo su socket UDP di oggetti il paradigma di programmazione client/server JAVA: IL CONCETTO DI STREAM, Studiare capitolo 4 Java

Dettagli

5 - I package di base in Java

5 - I package di base in Java 5 - I package di base in Java Vittorio Scarano Algoritmi e Strutture Dati: Algoritmi Distribuiti Università degli Studi di Salerno Organizzazione della lezione Obiettivo: Presentare gli strumenti di base

Dettagli

Corsi di Reti di Calcolatori (Docente Luca Becchetti) Esercizi su strati di trasporto e di rete

Corsi di Reti di Calcolatori (Docente Luca Becchetti) Esercizi su strati di trasporto e di rete Corsi di Reti di Calcolatori (Docente Luca Becchetti) Esercizi su strati di trasporto e di rete 1. Si consideri un protocollo per il trasporto non affidabile di dati realtime. Il sender spedisce un pacchetto

Dettagli

Input e Output in Java

Input e Output in Java Input e Output in Java Stream Redirecting Scomposizione dell input Uso di file Set di caratteri 1 Inserimento dati e test Riconsideriamo la versione iniziale della classe DataSet usata per illustrare le

Dettagli

appunti delle lezioni Architetture client/server: applicazioni server

appunti delle lezioni Architetture client/server: applicazioni server Sistemi informativi applicati (reti di calcolatori): appunti delle lezioni Architetture /: applicazioni 1 La logica dei Abbiamo visto che un applicazione si connette e comunica con un applicazione mediante

Dettagli

Lezione n.7 LPR Informatica Applicata Il Protocollo TCP Stream Socket. 20/04/2009 Laura Ricci

Lezione n.7 LPR Informatica Applicata Il Protocollo TCP Stream Socket. 20/04/2009 Laura Ricci Lezione n.7 LPR Informatica Applicata Il Protocollo TCP Stream Socket 20/04/2009 Laura Ricci Laura Ricci 1 DATAGRAM SOCKET API: RIASSUNTO DELLE PUNTATE PRECEDENTI lo stesso Datagram Socket può essere utilizzato

Dettagli

Java RMI: Esempio Completo di un Applicazione Distribuita

Java RMI: Esempio Completo di un Applicazione Distribuita Java RMI: Esempio Completo di un Applicazione Distribuita Il Problema Produttore/Consumatore in Ambiente Distribuito* *a cura del Prof. L. Nigro, Università della Calabria Java RMI (Remote Method Invocation)

Dettagli

File, flussi e pacchetto java.io

File, flussi e pacchetto java.io File, flussi e pacchetto java.io Formato binario e formato di testo I dati sono memorizzati nei files in due formati: testo (successione di caratteri) binario (successione di bytes) Ad es. numero 12345

Dettagli

La velocità di una carovana

La velocità di una carovana Programmazione A.A. 2002-03 I linguaggio Java ( Lezione X, Parte I ) Il primo programma Prof. Giovanni Gallo Dr. Gianluca Cincotti Dipartimento di Matematica e Informatica Università di Catania e-mail

Dettagli

Le basi del linguaggio Java

Le basi del linguaggio Java Corso di Laurea Ingegneria Civile Fondamenti di Informatica Dispensa 10 Le basi del linguaggio Java Aprile 2010 Le basi del linguaggio Java 1 Prerequisiti Nozioni generali sulla sintassi e semantica del

Dettagli

Operazioni di input/output. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni

Operazioni di input/output. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni Operazioni di input/output Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni Input /Output introduzione Per ottenere delle informazioni un programma apre un flusso (Stream)

Dettagli

Programmazione di rete in Java Java fornisce per la gestione della comunicazione le classi del package di networking java.net

Programmazione di rete in Java Java fornisce per la gestione della comunicazione le classi del package di networking java.net Programmazione di rete in Java Java fornisce per la gestione della comunicazione le classi del package di networking java.net Gerarchia delle classi in Java Package java.net le socket rappresentano il

Dettagli

Lezione n.6. TCP: Stream Sockets. 10/11/2009 Vincenzo Gervasi

Lezione n.6. TCP: Stream Sockets. 10/11/2009 Vincenzo Gervasi Università degli Studi di Pisa Dipartimento di Informatica Lezione n.6 LPR-A-09 TCP: Stream Sockets 10/11/2009 Vincenzo Gervasi Lezione U 6: TCP: Stream Sockets Vincenzo Gervasi 1 IL PROTOCOLLO TCP: STREAM

Dettagli

7 Esercitazione (svolta): Callback. Polling. Java RMI: callback. Server. Server. Client. Client. due possibilità:

7 Esercitazione (svolta): Callback. Polling. Java RMI: callback. Server. Server. Client. Client. due possibilità: 7 Esercitazione (svolta): due possibilità: Java RMI: callback Molte applicazioni richiedono un meccanismo publish/subscribe I partecipanti (client) necessitano di notifiche da parte del coordinatore (server)

Dettagli

Prima lezione di laboratorio. I mattoni di base di un programma Java. Comandi Unix. Riassunto. Oggi. Un programma complicato.

Prima lezione di laboratorio. I mattoni di base di un programma Java. Comandi Unix. Riassunto. Oggi. Un programma complicato. I mattoni di base di un programma Java Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro/ mizzaro@dimi.uniud.it Programmazione, lezione 2 1 ottobre

Dettagli

Java Socket LSO 2008

Java Socket LSO 2008 Java Socket LSO 2008 Modello Client/Server Richiesta di servizio Risposta Il cosiddetto lato client, effettua la richiesta di esecuzione di un servizio. La sua controparte, il lato server, effettua l esecuzione

Dettagli

Corsi di Reti di Calcolatori (Docente Luca Becchetti)

Corsi di Reti di Calcolatori (Docente Luca Becchetti) Corsi di Reti di Calcolatori (Docente Luca Becchetti) NOT : le soluzioni proposte sono volutamente sintetiche. Lo studente dovrebbe fare uno sforzo per risolvere i quesiti in modo autonomo, espandendo

Dettagli

24 - Possibili approfondimenti

24 - Possibili approfondimenti 24 - Possibili approfondimenti Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it

Dettagli

Introduzione. Java. G. Prencipe prencipe@di.unipi.it. accesso alla rete -- TCP

Introduzione. Java. G. Prencipe prencipe@di.unipi.it. accesso alla rete -- TCP Java accesso alla rete -- TCP G. Prencipe prencipe@di.unipi.it Introduzione Storicamente, programmare su un sistema di macchine distribuite è sempre stato complesso Il programmatore doveva conoscere diversi

Dettagli

Compute engine generici in RMI

Compute engine generici in RMI Compute engine generici in RMI Esempio: Calcolo del prodotto scalare Un unico server offre il servizio di calcolo del prodotto scalare tra vettori di interi Un client richiede al server il calcolo del

Dettagli

Java Networking TCP J0 1. Marco Ronchetti - ronchet@altavista.it

Java Networking TCP J0 1. Marco Ronchetti - ronchet@altavista.it Java Networking TCP 1 Sockets Java supporta un accesso semplificato e objectoriented alle sockets. Questo rende la network comunicazione di rete sensibilmente piu semplice. Molto piu semplice che in C++!!

Dettagli

Introduzione ai (Java) socket

Introduzione ai (Java) socket Introduzione ai (Java) socket Ivan Lanese slides originali di Tassi, Gessa, Ghini Dipartimento di Scienze dell informazione April 14, 2010 Outline Argomenti reti di calcolatori livelli OSI internet protocol

Dettagli

JAVA E LA RETE IL CONCETTO DI SOCKET. RETI DI CALCOLATORI Linguaggio Java: La Programmazione di Rete. già pronta!! COMUNICAZIONE VIA SOCKET CORSO DI

JAVA E LA RETE IL CONCETTO DI SOCKET. RETI DI CALCOLATORI Linguaggio Java: La Programmazione di Rete. già pronta!! COMUNICAZIONE VIA SOCKET CORSO DI Università degli Studi di Modena e Reggio Emilia Facoltà di Ingegneria Reggio Emilia JAVA E LA RETE CORSO DI RETI DI CALCOLATORI Linguaggio Java: La Programmazione di Rete Prof. Franco Zambonelli Lucidi

Dettagli

Basic Network Tutorial

Basic Network Tutorial java.net net.* Basic Network Tutorial aprile 2005 Agenda Java e network programming Low-level programming, network programming e distributed computing UDP e TCP Client e Server Applicazioni Bibliografia

Dettagli

Modificatori. Controllo di visibilità

Modificatori. Controllo di visibilità Modificatori I modificatori (modifiers) sono prefissi da applicare in diverse combinazioni a metodi, variabili ed alle classi stesse. L ordine in cui specificare i modificatori è irrilevante, ma è consigliato

Dettagli

Corso di Laurea in Informatica e Comunicazione Digitale. a.a. 2006-2007. Interazione Uomo-Macchina. Introduzione a Java.

Corso di Laurea in Informatica e Comunicazione Digitale. a.a. 2006-2007. Interazione Uomo-Macchina. Introduzione a Java. Corso di Laurea in Informatica e Comunicazione Digitale a.a. 2006-2007 Interazione Uomo-Macchina Introduzione a Java Seconda Parte Irene Mazzotta Giovanni Cozzolongo Vincenzo Silvetri 1 Richiami: Java

Dettagli

Gestione delle Eccezioni

Gestione delle Eccezioni Gestione delle Eccezioni Condizioni di Errore Una condizione di errore in un programma può avere molte cause Errori di programmazione Divisione per zero, cast non permesso, accesso oltre i limiti di un

Dettagli

STRINGHE IN JAVA In Java, le stringhe non sono pezzi di memo-ria con dentro dei caratteri, come in C: sono oggetti appartenenti alla classe

STRINGHE IN JAVA In Java, le stringhe non sono pezzi di memo-ria con dentro dei caratteri, come in C: sono oggetti appartenenti alla classe STRINGHE IN JAVA In Java, le stringhe non sono pezzi di memo-ria con dentro dei caratteri, come in C: sono oggetti appartenenti alla classe String Una stringa Java rappresenta uno specifico valore e come

Dettagli

Gestione delle eccezioni Individuazione e ripristino parseint Individuazione e ripristino Individuazione e ripristino parseint

Gestione delle eccezioni Individuazione e ripristino parseint Individuazione e ripristino Individuazione e ripristino parseint parseint parseint showinputdialog JOptionPanenull null throw BankAccount IllegalArgumentException amount public class BankAccount { public void withdraw(double amount) { if (balance < amount) { // Parametro

Dettagli

PROGRAMMARE IN JAVA VOLUME II

PROGRAMMARE IN JAVA VOLUME II Graziano Frosini Alessio Vecchio PROGRAMMARE IN JAVA VOLUME II PROGRAMMAZIONE DI RETE INTERFACCE GRAFICHE STRUTTURE DATI JVM JVM SOCKET SOCKET PROGRAMMARE IN JAVA Volume II POGRAMMAZIONE DI RETE INTERFACCE

Dettagli

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRGDWDJUDP

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRGDWDJUDP (VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRGDWDJUDP D /LQH&OLHQWH6HUYHU Sviluppare un applicazione C/S in cui: i inviano al server pacchetti (vuoti) che vengono interpretati dal server come richiesta

Dettagli

I thread di uno stesso processo condividono dati e codice del processo, ma lo stack di esecuzione ed il program counter sono privati.

I thread di uno stesso processo condividono dati e codice del processo, ma lo stack di esecuzione ed il program counter sono privati. Un thread (o processo leggero) è una attività, descritta da una sequenza di istruzioni, che esegue all'interno del contesto di esecuzione di un programma. Un thread procede nella sua esecuzione per portare

Dettagli