Programmazione distribuita in Java. Socket & Client-Server

Documenti analoghi
Architettura Client-Server

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRVWUHDP

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

Programmare con le Socket TCP in java. 2: Application Layer 1

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

Introduzione ai (Java) socket

Laboratorio di reti I: Il pacchetto java.net

Corso di Reti di Calcolatori L-A

Il modello client/server consente a due processi di condividere risorse e di cooperare per il raggiungimento di un obiettivo.

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

Parte II: Reti di calcolatori Lezione 12

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

Introduzione. Java. G. Prencipe accesso alla rete -- TCP

Parte II: Reti di calcolatori Lezione 10

Corso di Reti di Calcolatori

Corso di Reti di Calcolatori. Datagrammi

Datagrammi. NOTA: MulticastSocket estende DatagramSocket

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

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

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

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

Corso di Reti di Calcolatori. java.net.url

MagiCum S.r.l. Progetto Inno-School

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

Java Socket LSO 2008

R.Focardi Laboratorio di Ingegneria del Software 6. 1

Il Linguaggio Java: Socket.

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

Sincronizzazione con Java

Protocolli Internet. Canale di comunicazione. canale di comunicazione

Lezione n.3 LPR - Informatica Applicata

INFORMATICA GRAFICA - FONDAMENTI DI INFORMATICA Ing. Civile - Edile/Architettura Dott. Penzo SOLUZIONE PROVA SCRITTA DEL 16/09/2002.

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRGDWDJUDP

Alarms Android Mobile Programming Prof. R. De Prisco

Socket & RMI Ingegneria del Software - San Pietro

ESERCITAZIONI DI LABORATORIO 1

Programmazione di rete in Java

Programmare con le Socket TCP

Internet Socket e RMI

Programmare con le Socket

Lezione 5: Socket SSL/ TLS. Corso di Programmazione in Rete Laurea Magistrale in Ing. Informatica Università degli Studi di Salerno

Basic Network Tutorial

maggio 2004 Stefano Sanna - gerda@crs4.it

Applicazioni web. Parte 5 Socket

Reti di Calcolatori:

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

Cifratura simmetrica

PROGRAMMARE IN JAVA VOLUME II

Internet Socket e RMI

Flussi, lettori e scrittori

Altri tipi di connessione

Corsi di Reti di Calcolatori (Docente Luca Becchetti)

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

10.1. Un indirizzo IP viene rappresentato in Java come un'istanza della classe InetAddress.

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

Il linguaggio Java I file sequenziali

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

Luca Mari, Sistemi informativi applicati (reti di calcolatori) appunti delle lezioni. Architetture client/server: applicazioni server

Programmazione Orientata agli Oggetti in Linguaggio Java

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

appunti delle lezioni Architetture client/server: applicazioni client

Comunicazione tra processi con sockets TCP

/** * VETTORE DINAMICO elementi */ private Vector elementi; /** * METODO COSTRUTTORE */ public coda() { elementi=new Vector(); }

Applicazioni TCP/IP. Maurizio Cozzetto. Brescia 20 agosto 2014

Input e Output in Java

Esercitazione 6. Tutor: Ing. Diego Rughetti. Anno Accademico 2007/2008

Networking. Mauro Migliardi Ph. D.

Corso sul linguaggio Java

Programmazione dei socket con TCP #2

Corso sul linguaggio Java

DNS: Domain Name System

Gestione delle Eccezioni

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

I name server DNS. DNS: Domain Name System. Esempio di DNS. DNS: Root name server. DNS: queries ripetute

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

Organizzazione della lezione. Lezione 18 Remote Method Invocation - 6. (con callback) L accesso al registry per il rebind()

DNS: Domain Name System

20 - Input/Output su File

Operazioni di scrittura e lettura con periferici in linguaggio Java

Linguaggi di Programmazione: Paradigmi di Programmazione

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

Telematica II 12. Esercitazione/Laboratorio 4

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

Telematica II 15. Esercitazione/Laboratorio 5

Unità B3 Strutture di controllo

Input/Output in Java

UnicastRemoteObject. Massimo Merro Programmazione di Rete 103 / 124

// inizializzazione della biblioteca con utenti, libri e prestiti // non richiesta Biblioteca.inizializza();

Applicazioni distribuite

Gestione delle eccezioni in Java

Paolo Macchi. App mobile a cura di Serena Arena Jessica Olgiati

Esercizi della lezione 5 di Java

appunti delle lezioni Architetture client/server: applicazioni server

Tecniche di programmazione concorrente e distribuita

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

Luca Mari, Sistemi informativi applicati (reti di calcolatori) appunti delle lezioni. Architetture client/server: applicazioni client

Programmazione Java (Applicazioni e Applet )

Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A Esercitazione. Programmazione Object Oriented in Java

TFA 42 Sistemi e Reti di Calcolatori per la Didattica

RMI. Java RMI RMI. G. Prencipe

Transcript:

Programmazione distribuita in Java Socket & Client-Server 1

Strumenti per networking Libreria java.net Socket (Astrazione per una presa di comunicazione) Serializzazione

Socket Per comunicare si apre una socket specificando Indirizzo IP Porta A quell indirizzo, su tale porta, ci deve essere in ascolto un server Usare gli stream associati alla socket per leggere e scrivere dati

Lato Server Creare un oggetto ServerSocket, specificando il numero di porta ServerSocket serv_socket = new ServerSocket(port) Chiamare accept() per restare in attesa di connessioni Socket cli_socket = serv_socket.accept() Quando accept() ritorna la connessione col client è stabilita accept() restituisce una socket per comunicare col client

Lato Client Creare un oggetto di classe Socket, specificando indirizzo e porta Socket sock = new Socket( myhost.dsi.it, 1234) Oppure specificando l indirizzo IP: Socket sock = new Socket( 150.145.63.148, 1234) Quando l oggetto è costruito la connessione col server è stabilita

Comunicazione Recuperare le stream associate alla socket: InputStream istream = sock.getinputstream() OutputStream ostream = sock.getoutputstream() Costruire altri stream su quelli della socket PrintWriter out = new PrintWriter (ostream,true); out.println( Ciao a tutti" ); // si usa esattamente come la System.out.println BufferedReader in = new BufferedReader (istream); String s=in.readline(); // legge una linea di testo dal socket

Comunicazione (2) Recuperare le stream associate alla socket: InputStream istream = sock.getinputstream() OutputStream ostream = sock.getoutputstream() Costruire altri stream su quelli della socket DataOutputStream out = new DataOutputStream (ostream); out.writeint(4); // scrive un intero DataInputStream in = new DataInputStream(istream); int x=in.readint(); // legge un intero

java.net.socket (1) Socket(String host, int port): crea un socket e lo connette all host ed alla porta specificati; host è un hostname (per es. www.deis.unical.it ) oppure un indirizzo IP (per es. 160.97.27.7 ). Socket(InetAddress address, int port): crea un socket e lo connette all indirizzo ed alla porta specificati. void close(): chiude il socket. InetAddress getinetaddress(): restituisce l indirizzo a cui è connesso il socket. int getport(): restituisce la porta remota a cui è connesso il socket. int getlocalport(): restituisce la porta locale del socket.

java.net.socket (2) InputStream getinputstream(): restituisce lo stream di input del socket; questo stream è utilizzato per leggere i dati provenienti dal socket. OutputStream getoutputstream(): restituisce lo stream di output del socket; questo stream è utilizzato per scrivere dati nel socket. void setsotimeout(int timeout): imposta il timeout per operazioni di lettura dal socket; se il tempo specificato trascorre genera una InterruptedIOException. String tostring(): restituisce una rappresentazione del socket del tipo Socket[addr=hostname/192.168.90.82,port=3575,localport=1026]

Connessione ad un time-server con Telnet telnet time-a.timefreq.bldrdoc.gov 13 52667 03-01-28 12:05:37 00 0 0 832.0 UTC(NIST) * Connessione all'host perduta.

Connessione ad un time-server con Java import java.io.*; import java.net.*; public class SocketTest { public static void main (String args[]) { try { Socket s = new Socket ("time-a.timefreq.bldrdoc.gov",13); BufferedReader in = new BufferedReader (new InputStreamReader (s.getinputstream())); boolean more = true; while (more) { String line = in.readline(); if (line == null) more = false; else System.out.println (line); catch (IOException e) { System.out.println(e);

Timeout di socket Socket s = new Socket ( ); s.setsotimeout(10000); Le operazioni di lettura che seguono generano una InterruptedIOException quando è stato raggiunto il timeout. try { String line; while (line = in.readline())!= null) { process line catch (InterrupedIOException e) { react to timeout Questo timeout può essere settato su un socket già istanziato. Tuttavia si potrebbe verificare un blocco indefinito già in fase di creazione del socket, fino a quando non si stabilisce la connessione con l host.

java.net.serversocket ServerSocket(int port): crea un server socket che controlla una porta. Socket accept(): rimane in attesa di una connessione, e restituisce un socket tramite il quale si effettua la comunicazione. void close(): chiude il server socket. InetAddress getinetaddress(): restituisce l indirizzo locale di questo server socket. int getlocalport(): restituisce la porta locale di questo server socket.

EchoServer (1) import java.io.*; import java.net.*; public class EchoServer { public static void main(string[] args ) { try { ServerSocket s = new ServerSocket(8189); Socket incoming = s.accept( ); BufferedReader in = new BufferedReader (new InputStreamReader(incoming.getInputStream())); PrintWriter out = new PrintWriter (incoming.getoutputstream(), true /* autoflush */); out.println( Connessione Accettata. Scrivi addio per finire" );

EchoServer (2) boolean done = false; while (!done) { String line = in.readline(); if (line == null) done = true; else { out.println( messaggio:" + line); if (line.trim().equals( addio")) done = true; // while incoming.close(); catch (Exception e) { System.err.println(e); // main // class

EchoClient (1) import java.io.*; import java.net.*; public class EchoClient { public static void main (String args[]) { try { InetAddress myself = InetAddress.getLocalHost(); Socket s = new Socket (myself.gethostaddress(), 8189); System.out.println("Richiesta connessione in corso..."); // Se non si lavora in locale immettere il corretto // indirizzo IP del server invece di myself.gethostaddress() BufferedReader in = new BufferedReader (new InputStreamReader (s.getinputstream())); PrintWriter out = new PrintWriter(s.getOutputStream(), true);

EchoClient (2) boolean more = true; while (more) { String line = in.readline(); if (line == null) more = false; else System.out.println ("Ricevuto dal server: " + line); String mess = Console.readString(">"); out.println(mess); if (mess.trim().equals("addio")) more = false; System.out.println("Chiusura connessione"); s.close(); catch (IOException e) { System.out.println(e);