Sockets in Java. Lorenzo Gallucci

Documenti analoghi
Architettura Client-Server

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

Socket & RMI Ingegneria del Software - San Pietro

Modello client-server

Parte II: Reti di calcolatori Lezione 10

R.Focardi Laboratorio di Ingegneria del Software 6. 1

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

Programmazione di rete in Java

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

Corso di Reti di Calcolatori L-A

MagiCum S.r.l. Progetto Inno-School

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRVWUHDP

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

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

Comunicazione tra processi con sockets TCP

Sincronizzazione con Java

Laboratorio di reti I: Il pacchetto java.net

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

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

Java Socket LSO 2008

Corsi di Reti di Calcolatori (Docente Luca Becchetti)

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

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

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

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

Lezione n.3 LPR - Informatica Applicata

RETI DI CALCOLATORI Linguaggio Java: Eccezioni

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

appunti delle lezioni Architetture client/server: applicazioni server

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

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

PROGRAMMARE IN JAVA VOLUME II

Applicazioni web. Parte 5 Socket

Il linguaggio Java I file sequenziali

Networking. Mauro Migliardi Ph. D.

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

Programmare con le Socket

Protocolli Internet. Canale di comunicazione. canale di comunicazione

ESERCITAZIONI DI LABORATORIO 1

Applicazioni distribuite

Basic Network Tutorial

Programmare con le Socket TCP

Introduzione ai (Java) socket

appunti delle lezioni Architetture client/server: applicazioni client

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

Datagrammi. NOTA: MulticastSocket estende DatagramSocket

Altri tipi di connessione

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

Eccezioni ed asserzioni

Programmazione dei socket con TCP #2

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

Java e Serializzazione dalla A all'xml di Leonardo Puleggi

Gestione delle eccezioni in Java

Introduzione alla programmazione Http lato server in Java

UnicastRemoteObject. Massimo Merro Programmazione di Rete 103 / 124

Il Linguaggio Java: Socket.

Prova d Esame Compito A

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

Reti di Calcolatori:

Corso di Reti di Calcolatori. java.net.url

Note pratiche sullo sviluppo di servlet (I)

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

Il pattern ABSTRACT FACTORY

Polimorfismo parametrico vs polimorfismo per inclusione

Laboratorio di Programmazione di Rete Corso A

Java, Oggetti e Strutture Dati di G. Callegarin - Edizioni CEDAM

Cifratura simmetrica

Esercizio monitor. Sistemi Operativi T 1

Corso di Reti di Calcolatori

Corso di Reti di Calcolatori. Datagrammi

Prova d Esame Compito A

Transcript:

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 UDP) Gestione di un sottoinsieme delle funzionalità protocollo HTTP Gestione di URL e URI In questo corso, siamo maggiormente interessati all I/O su socket si basa sull I/O su stream visto la volta scorsa!

Sockets Classi principali per l I/O su socket in modalità TCP: ServerSocket: consente di gestire un punto d accesso per i client Ogni connessione genera un socket, sia lato client, che lato server Socket: incapsula il concetto di connessione bidirezionale, associato ad un socket TCP Può essere creato lato server in risposta ad un tentativo di connessione Può essere creato a richiesta, lato client

Classe ServerSocket Utilizzata tipicamente nel codice che esegue sulla macchina che ha il ruolo di server Alcuni dei metodi disponibili in ServerSocket sono: ServerSocket(int port) costruttore che inizializza un server socket in ascolto sulla specifica porta TCP Socket accept() accetta la prossima richiesta di connessione, generando un socket lato server (se necessario, attende l arrivo di una richiesta OPERAZIONE BLOCCANTE!) void close() chiude il server socket

Classe ServerSocket Ve ne sono molti altri, che consentono di personalizzare il server socket quanto a: Prestazioni Modalità di bufferizzazione Riutilizzo di server socket esistenti Al solito: TUTTI i metodi possono lanciare una IOException!!

Classe Socket Utilizzata nel codice che esegue sulla macchina che ha il ruolo di server, ma anche in quella che il ruolo di client Alcuni dei metodi disponibili in Socket sono: Socket(String host, int port) costruttore che inizializza un socket TCP connesso alla porta port del server host ( utilizzato nel client) InputStream getinputstream() apre uno stream di input che legge dati dal socket OutputStream getoutputstream() apre uno stream di output che scrive dati sual socket void close() chiude il socket

Classe Socket Ve ne sono molti altri, che consentono di personalizzare un socket quanto a: Prestazioni (urgent data, traffic class, ecc.) Modalità di bufferizzazione Riutilizzo di oggetti Socket esistenti Al solito: TUTTI i metodi possono lanciare una IOException!!

Utilizzo di socket e server socket Tipicamente, un ServerSocket (usato sul lato server) viene: Inizializzato con una specifica porta Utilizzato in un ciclo, attivo finchè è attivo il server, che richiama il metodo accept() Al socket restituito da quest ultimo viene richiesto di creare due stream, uno di input, l altro di output, per interagire con il client appena connesso Al termine, il socket generato può venir chiuso (con close()) e si ritorna al ciclo di accept()

Utilizzo di socket e server socket Lato client: Si inizializza un Socket indicando una specifica porta ed un indirizzo (del server) Al socket così ottenuto viene richiesto di creare due stream, uno di input, l altro di output, per interagire con il server appena connesso Al termine, il socket generato può venir chiuso (con close()) e il client può proseguire con altre operazioni

Esempio con i Socket Fattorizziamo le funzionalità di I/O dall esempio dell altra volta: package sistemidielaborazioneinrete.io; import java.io.datainputstream; import java.io.dataoutputstream; import java.io.ioexception; import java.io.inputstream; import java.io.outputstream; public class Utilità static void scrivistringa(string stringadascrivere, OutputStream outputstream) throws IOException DataOutputStream dataoutputstream = new DataOutputStream(outputStream); dataoutputstream.writeutf(stringadascrivere);

Esempio con i Socket (continua) static String leggistringa(inputstream inputstream) throws IOException DataInputStream datainputstream = new DataInputStream(inputStream); String stringaletta = datainputstream.readutf(); return stringaletta;

Esempio con i Socket Dall esempio della volta scorsa, l I/O in memoria si può fare così: private static void leggiescriviinmemoria(string stringadascrivere) throws IOException ByteArrayOutputStream baos = new ByteArrayOutputStream(); Utilità.scriviStringa(stringaDaScrivere, baos); ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); String readutf = Utilità.leggiStringa(bais); System.out.println(readUTF);

Esempio con i Socket Volendo invece scrivere su un socket: private static void leggiescriviattraversounsocket(string stringadascrivere, int porta) throws IOException // Assicurati che la prima connessione sia subito accettata final Server server = new Server(porta); server.start(); Socket socket = new Socket("localhost", porta); OutputStream outputstream = socket.getoutputstream(); Utilità.scriviStringa(stringaDaScrivere, outputstream); Si noti la dipendenza da una classe Server, che implementa lo schema cui si è accennato in precedenza

Esempio con i Socket La classe Server è dunque package sistemidielaborazioneinrete.io; import java.io.ioexception; import java.net.serversocket; import java.net.socket; public class Server extends Thread private final ServerSocket serversocket; private final int port; public Server(int port) throws IOException this.port = port; this.serversocket = new ServerSocket(port); setdaemon(true);

Esempio con i Socket (continua) @Override public void run() try while (true) Socket socket = serversocket.accept(); String readutf = Utilità.leggiStringa(socket.getInputStream()); System.out.println(readUTF + " ( attraverso il socket " + port + ")"); catch (IOException e) throw new RuntimeException("Impossibile accettare la connessione", e);