Il Linguaggio Java: Socket.



Похожие документы
Programmare con le Socket

Programmare con le Socket TCP

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

Reti di Calcolatori:

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRVWUHDP

DNS: Domain Name System

Architettura Client-Server

Datagrammi. NOTA: MulticastSocket estende DatagramSocket

Applicazioni web. Parte 5 Socket

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

Parte II: Reti di calcolatori Lezione 10

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

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

Corso di Reti di Calcolatori

Corso di Reti di Calcolatori. Datagrammi

appunti delle lezioni Architetture client/server: applicazioni client

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

Socket & RMI Ingegneria del Software - San Pietro

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

Corso di Reti di Calcolatori L-A

MODELLO CLIENT/SERVER. Gianluca Daino Dipartimento di Ingegneria dell Informazione Università degli Studi di Siena

Altri tipi di connessione

Introduzione alle applicazioni di rete

Applicazioni distribuite

Corsi di Reti di Calcolatori (Docente Luca Becchetti)

Java Socket LSO 2008

Telematica II 12. Esercitazione/Laboratorio 4

Esercitazione. Formato di compitini e compiti: domande ed esercizi "closed book" G. Ferrari - Reti di calcolatori.

Dal protocollo IP ai livelli superiori

appunti delle lezioni Architetture client/server: applicazioni server

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

Programmazione distribuita in Java. Socket & Client-Server

Programmazione dei socket con TCP #2

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

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

R.Focardi Laboratorio di Ingegneria del Software 6. 1

DNS: Domain Name System

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

Protocolli applicativi: FTP

DNS: Domain Name System

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

DNS: Domain Name System

Networking. Mauro Migliardi Ph. D.

Laboratorio di reti I: Il pacchetto java.net

INFORMATICA DISTRIBUITA. lez 4 Livello applicazione

Controllo Winsock di Visual Basic

Reti di Telecomunicazione Lezione 6

Standard di comunicazione

PARTE 1 richiami. SUITE PROTOCOLLI TCP/IP ( I protocolli di Internet )

2.5. L'indirizzo IP identifica il computer di origine, il numero di porta invece identifica il processo di origine.

TECNOLOGIE E PROGETTAZIONE DI SISTEMI INFORMATICI E DI TELECOMUNICAZIONI

Le Reti Informatiche

Esercizi (1-2): da: TCP/IP Sockets in C (Donahoo-Calvert)

Architettura del. Sintesi dei livelli di rete. Livelli di trasporto e inferiori (Livelli 1-4)

MagiCum S.r.l. Progetto Inno-School

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

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

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

Nelle reti di calcolatori, le porte (traduzione impropria del termine. port inglese, che in realtà significa porto) sono lo strumento

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

OSOR. Applicazioni di Rete

Protocolli Internet. Canale di comunicazione. canale di comunicazione

InterNet: rete di reti

Reti di Telecomunicazione Lezione 8

Come funziona il WWW. Architettura client-server. Web: client-server. Il protocollo

Informatica per la comunicazione" - lezione 8 -

Reti di Telecomunicazione Lezione 7

Programmazione di rete in Java

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

Fondamenti di Internet e Reti. Antonio Capone, Matteo Cesana, Ilario Filippini, Guido Maier

Reti di Calcolatori. Vantaggi dell uso delle reti. Cosa è una rete? Punto di vista logico: sistema di dati ed utenti distribuito

Corso sul linguaggio Java

1. RETI INFORMATICHE CORSO DI LAUREA IN INGEGNERIA INFORMATICA SPECIFICHE DI PROGETTO A.A. 2013/ Lato client

Cenni di programmazione distribuita in C++ Mauro Piccolo

UDP. Livello di Trasporto. Demultiplexing dei Messaggi. Esempio di Demultiplexing

Applicazioni web centrati sui dati (Data-centric web applications)

Siti web centrati sui dati (Data-centric web applications)

TCP/IP: INDIRIZZI IP SIMBOLICI

Introduzione. Livello applicativo Principi delle applicazioni di rete. Stack protocollare Gerarchia di protocolli Servizi e primitive di servizio 2-1

Lo scenario: la definizione di Internet

Reti di Calcolatori. Il software

Indirizzi Internet e. I livelli di trasporto delle informazioni. Comunicazione e naming in Internet

Il funzionamento delle reti

Java Remote Method Invocation

Транскрипт:

Il Linguaggio Java: Socket Il Linguaggio Java: Socket. Walter Cazzola Dipartimento di Informatica e Comunicazione Università à degli Studi di Milano. e-mail: cazzola@disi.unige.it Walter Cazzola Java Avanzato: Socket 1

Internet Con il concetto di internet si indica una collezione di una o più reti connesse da router. La rete che conosciamo come Internet non è altro che un esempio del concetto stesso di internet. LAN Router LAN Router WAN Router LAN Router LAN Walter Cazzola Java Avanzato: Socket 2

Protocolli di Rete Un protocollo è un insieme di regole che governano le comunicazioni. Esempi: SMTP: : Simple Mail Transfer Protocol HTTP: HyperText Transfer Protocol FTP: : File Transfer Protocol Il protocollo HTTP utilizza un Uniform Resource Locator (URL) per specificare un indirizzo Internet: METODO://NOME-HOST/PERCORSO HTTP://www.disi.unige.it/person/CazzolaW/index.html Walter Cazzola Java Avanzato: Socket 3

Protocolli di Rete: : Client/Server Un applicazione client/server spezza un task fra due processi (spesso su computer diversi): il client ed il server. Server Richiesta Servizio Fornitura Servizio Client Protocollo Client/Server: Server: mette a disposizione un servizio su un particolare host. Client: contatta il server e richiede il servizio. Server: accetta e soddisfa una richiesta da parte di un client. Walter Cazzola Java Avanzato: Socket 4

Protocolli di Rete: : ISO/OSI Una rete è divisa in diversi strati, ognuno dei quali gestisce uno specifico protocollo.. I messaggi scambiati sulla rete attraversano ogni singolo strato: Application Level: Fornisce i servizi. Es. HTTP, SMTP, e DNS Transport Layer: Consegna i pacchetti; Es. TCP, e UDP Network Layer: Sposta i pacchetti; Fornisce internetworking: indirizzi IP. Physical e Data Link Layers: Trasmette i singoli bit di un pacchetto attraverso un dispositivo, da un indirizzo a un altro. Es. ETHERNET. Protocolli di trasmissione a basso livello. Walter Cazzola Java Avanzato: Socket 5

Il Protocollo di Internetworking (IP) Il protocollo di internetworking (IP) traduce un protocollo di rete in un altro. IP rende possibile la comunicazione tra reti diverse: Ethernet-based LAN Router(IP Protocol) Token-ring based LAN "hello" "goodbye" hello=bonjour au revoir=goodbye "bonjour" "au revoir" English Protocol French Protocol Walter Cazzola Java Avanzato: Socket 6

Il Package java.net DatagramPacket DatagramSocket InetAddress java.net Key Classe Object java.lang ServerSocket Socket URL Classe Astratta Classe Finale estende URLConnection HttpURLConnection URLEncoder MalformedURLException IOException java.io ProtocolException SocketException UnknownHostException BindException ConnectException NoRouteToHostException UnknownServiceException Walter Cazzola Java Avanzato: Socket 7

Java Library: java.net.url Metodi per collegarsi ad un sito web: public final class URL extends Object { // Costruttore public URL( String urlspec ) throws MalformedURLException; // metodi di istanza pubblici public URLConnection openconnection() throws IOException; public final InputStream openstream() throws IOException; Esempio: URL della risorsa. URL url; try { url = new URL("http://www.disi.unige.it/person/CazzolaW/index.html"); "); catch (MalformedURLException( e) { System.out.println("Malformed URL: " + url.tostring()) ; Walter Cazzola Java Avanzato: Socket 8

Applet: Scaricare dalla Rete Metodi per scaricare risorse (audio/video) dalla rete: public class Applet extends Panel { public AppletContext getappletcontext(); public AudioClip getaudioclip(url url); public Image getimage(url url); public void play(url url); public void showstatus(string msg); URL url; try { url = new URL("http://www.disi.unige.it/person/CazzolaW/sound.au"); "); play(url); url = new URL("http://www.disi.unige.it/person/CazzolaW/demo.gif") ") ; imgref = getimage(url); catch (MalformedURLException( e) { System.out.println("Malformed URL: "+url.tostring url.tostring()) ; Scarica e suona un file audio. Scarica e memorizza un immagine. Walter Cazzola Java Avanzato: Socket 9

Es.: Scaricare e Visualizzare un File Leggere il contenuto di un file remoto è, grosso modo, come leggere un file locale. public class Download { private URL url; // l URL del file che si vuole scaricare. private BufferedReader data; // il Reader che useremo per accedere al file. public Download(String _url)) throws MalformedURLException { url = new URL(_url); public void readtext() throws IOException { data = new BufferedReader(new InputStreamReader(url.openStream())); ())); String line = data.readline(); while (line!= null) { // legge ogni singola riga del file System.out.println(line); // e la visualizza sul terminale line = data.readline(); data.close(); // readtextintodisplay() BufferedReader.readLine() ritorna null alla fine del file. Walter Cazzola Java Avanzato: Socket 10

Es.: Scaricare e Visualizzare un File Metodo main(): public static void main(string argv[]) { try { Download d = new Download("http://www.disi.unige.it/person/CazzolaW/index.html"); "); d.readtext(); // scarica e visualizza la pagina HTML catch (MalformedURLException( e) { // potrebbe essere lanciato da URL() System.out.println("URL: : "+e.getmessage e.getmessage()); catch( IOException e ) { // potrebbe essere lanciato da read() o close() System.out.println("IO: : "+e.getmessage e.getmessage()); Walter Cazzola Java Avanzato: Socket 11

Comunicazioni Client/Server Via Sockets Un socket è un canale di comunicazione bidirezionale. Sono state introdotte in Unix nel 1981. La gestione (creazione, uso e rilascio) delle socket è interamente a carico dell applicazione. Paradigma Client/Server. Il server crea un socket su una porta specifica ed attende che il client richieda una connessione. Due tipi di trasporto via socket: UDP (veloce( ma inaffidabile) ) e TCP. Walter Cazzola Java Avanzato: Socket 12

Socket Ogni socket ha due flussi, uno per l input e l altro per l output. Socket Connection Server Input Stream Output Stream Client Analogia: chiamata telefonica. Server: attende che il telefono suoni allora inizia il servizio. Client: chiama il numero telefonico (URL), si connette e richiede un servizio. Walter Cazzola Java Avanzato: Socket 13

Socket Programming con TCP Affinché il cliente possa collegarsi al server: il server deve essere già in esecuzione; ; e DEVE aver creato il socket che da il benvenuto al client. Connessione del cliente: si crea un TCP socket locale al cliente; specificando l IP del server e la porta su cui sta attendendo la connessione. il client TCP crea una connessione al server TCP. Lato server: Il server TCP crea il socket per permettere la comunicazione; Nota.. TCP offre un trasferimento ordinato ed affidabile dei byte in un canale fra client e server. Walter Cazzola Java Avanzato: Socket 14

Socket: Protocollo Base dei Server Pseudocodice: Java: Socket connectionsocket; // riferimento al socket ServerSocket welcomesocket; // la porta sulla quale il server sarà in attesa try { welcomesocket = new ServerSocket(10001); // creare una porta connectionsocket = welcomesocket.accept(); // attende richiesta connessione // comunicazione con il client 1. Creare un SocketServer e scegliere una porta. 2. Mettersi in ascolto sulla porta e accettare una connessione da un client. 3. Conversare col client. 4. Chiudere il socket. connectionsocket.close(); // chiudere il socket catch (IOException( e) { e.printstacktrace(); Su thor.disi.unige.it Walter Cazzola Java Avanzato: Socket 15

Socket: Protocollo Base dei Client Pseudocodice: Java: 1. Apre una connessione verso il server specificato. 2. Conversa con il server. 3. Chiude la connessione. Socket clientsocket; // riferimento al socket try { clientsocket = new Socket( thor.disi.unige.it", 10001); // connessione // effettua la comunicazione con il server clientsocket.close(); // chiude il socket catch (IOException( e ) { e.printstacktrace(); Walter Cazzola Java Avanzato: Socket 16

Interazione Client/Server (TCP) Server (Eseguito su A) Client (Eseguito su B) Crea socket su porta x per richieste in arrivo. welcomesocket = ServerSocket( ) Attesa richieste di creazione nuovo socket. connectionsocket = welcomesocket.accept() Si stabilisce una Connessione TCP Richiesta connessione ad A sulla posta x. clientsocket = Socket( ) Legge dati dal socket. connectionsocket Scrive dati sul socket. clientsocket Scrive dati sul socket. connectionsocket Legge dati dal socket. clientsocket Chiude la connessione. connectionsocket.close() Chiude la connessione. clientsocket.close() Walter Cazzola Java Avanzato: Socket 17

Socket: Scrivere in un Socket Un metodo per scrivere su un socket (usabile( sia da client che da server): protected void writetosocket(socket sock, String str) throws IOException { ostream = sock.getoutputstream(); for (int( k = 0; k < str.length() ; k++) ostream.write(str.charat(k)); // writetosocket() Ottiene lo Stream di Output. Scrive sullo Stream di Output. Un socket crea automaticamente i propri stream. Nota: : non chiudere lo stream del socket dopo un operazione di I/O a meno che il socket non sia più necessario. Walter Cazzola Java Avanzato: Socket 18

Socket: Leggere da un Socket Analogamente a quanto fatto per scrivere su un socket: protected String readfromsocket(socket sock) throws IOException { istream = sock.getinputstream(); String str=""; char c; while ( ( c = (char) istream.read() )!= '\n')' str = str + c + ""; return str; legge Ottiene lo Stream di Input. legge un byte e lo converte in char. Protocollo: : se il client scrive dei byte, il server DEVE leggere tali byte e viceversa. Walter Cazzola Java Avanzato: Socket 19

Esempio: : Echo Client/Server Scrivere un applicazione client/server il cui comportamento è: input da tastiera. Echo server at thor.disi.unige.it waiting for connections Accepted a connection from thor.disi.unige.it Closed the connection Accepted a connection from thor.disi.unige.it Closed the connection CLIENT: connected to thor.disi.unige.it thor.disi.unige.it' SERVER: Hello, how may I help you? CLIENT: type a line or 'goodbye' to quit INPUT: hello SERVER: You said 'hello' INPUT: this is fun SERVER: You said 'this is fun' INPUT: goodbye SERVER: Goodbye CLIENT: connection closed Client Side: Server Side: Walter Cazzola Java Avanzato: Socket 20

Esempio: : Echo Client/Server (cont.) Si usa una classe comune che fornisca le operazioni di lettura e scrittura sul file e nasconda la natura duale dei socket. public class ClientServer extends Thread { protected InputStream istream; // i due flussi legati al socket protected OutputStream ostream; protected String readfromsocket(socket sock) throws IOException { istream = sock.getinputstream(); String str=""; char c; while ( ( c = (char) istream.read() )!= '\n')' str = str + c + ""; return str; // readfromsocket() Classe Comune protected void writetosocket(socket sock, String str) ) throws IOException { ostream = sock.getoutputstream(); if (str.charat( str.charat( str.length() - 1 )!= '\n')' str = str + '\n';' for (int( k = 0; k < str.length() ; k++) ostream.write(str.charat(k)); // writetosocket() // ClientServer Walter Cazzola Java Avanzato: Socket 21

Esempio: : Echo Client/Server (cont.) public class EchoServer extends ClientServer { private ServerSocket port; private Socket socket; public EchoServer(int portnum, int nbacklog) ) { port = new ServerSocket(portNum, nbacklog); public void run() { while(true) ) { socket = port.accept(); System.out.println("Accepted a connection from " + socket.getinetaddress()); provideaservice(socket); socket.close(); System.out.println("Closed the connection\n"); n"); // run() protected void provideaservice(socket socket) { writetosocket(socket,, "Hello, how may I help you?\n"); do { str = readfromsocket(socket); if (str.tolowercase().equals("goodbye( str.tolowercase().equals("goodbye")) ")) writetosocket(socket,, "Goodbye\n"); else writetosocket( ( socket, "You said '" + str + "'\n"); while (!str.tolowercase().equals("goodbye str.tolowercase().equals("goodbye")); ")); // provideaservice() Classe Server Walter Cazzola Java Avanzato: Socket 22

Esempio: : Echo Client/Server (cont.) public class EchoClient extends ClientServer { protected Socket socket; private BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); public EchoClient(String url, int port) { socket = new Socket(url,, port); System.out.println("CLIENT: : connected to " + url + ":" + port); // EchoClient() public void run() { requestaservice(socket); socket.close(); // run() Classe Client protected void requestaservice(socket socket) { String servstr = readfromsocket(socket); // effettua l handshaking if (servstr.substring(0,5).equals("hello")) { String userstr = ""; do { userstr = in.readline(); // legge l input writetosocket(socket, userstr + "\n");" // lo scrive sul socket servstr = readfromsocket(socket); // legge la risposta del server System.out.println("SERVER: : " + servstr); // e la visualizza while (!userstr.tolowercase().equals("goodbye userstr.tolowercase().equals("goodbye")); ")); // finché non riceve un goodbye // requestaservice() Walter Cazzola Java Avanzato: Socket 23

Socket Programming con UDP UDP offre un trasferimento inaffidabile di gruppi di byte (datagram) fra client e server. UDP: nessuna connessione fra client e server: nessun handshaking; il client attacca esplicitamente ad datagram l indirizzo IP e la porta di destinazione; il server deve estrarre l indirizzo IP e la porta del client dal datagram ricevuto; UDP: i dati trasmessi possono essere persi o ricevuti nell ordine sbagliato. Walter Cazzola Java Avanzato: Socket 24

Interazione Client/Server (UDP) Server (Eseguito su A) Client (Eseguito su B) Crea socket su porta x per richieste in arrivo. serversocket = DatagramSocket( ) Crea socket clientsocket = DatagramSocket( ) Legge dati dal socket serversocket Crea (IP,port)) e manda richiesta datagram clientsocket Scrive dati sul socket serversocket Specificando porta e ip Legge dati dal socket. clientsocket Chiude il socket. clientsocket.close() Walter Cazzola Java Avanzato: Socket 25

InetAddress Classe che incapsula gli indirizzo IP (supporta( sia nomi simbolici che indirizzi numerici). getlocalhost() (): rende un oggetto InetAddress rappresentante l IP del localhost; getbyname() (): rende un oggetto InetAddress relativo all IP dell host specificato come argomento. Walter Cazzola Java Avanzato: Socket 26

DatagramSocket Classe che implementa i socket, sia client che server, con protocollo UDP; send(): spedisce datagram (oggetti( della classe DatagramPacket); receive(): riceve datagram; getlocalport(): ritorna la porta su cui è aperto il socket. getlocaladdress(): ritorna l indirizzo del localhost. Walter Cazzola Java Avanzato: Socket 27

DatagramPacket Classe che implementa i datagram UDP spediti. costruttori: per datagram spediti; ; e per datagram ricevuti. metodi: getdata() (): ritorna i dati contenuti nel datagram; getport() (): ritorna la porta di destinazione del datagram; getsocketaddress() (): Ritorna l indirizzo di destinazione del datagram. Walter Cazzola Java Avanzato: Socket 28

Esempio: : Java Client (UDP) class UDPClient { public static void main(string args[]) throws Exception { DatagramSocket clientsocket = new DatagramSocket(); // crea client socket InetAddress IPAddress = InetAddress.getByName("hostname"); "); // recupera IP byte[] senddata = new byte[1024]; byte[] receivedata = new byte[1024]; // crea datagram da inviare DatagramPacket sendpacket = new DatagramPacket(sendData, senddata.length, IPAddress,, 9876); clientsocket.send(sendpacket); // spedisce datagram DatagramPacket receivepacket = new DatagramPacket(receiveData, receivedata.length); clientsocket.receive(receivepacket); // legge Il datagram dal server String modifiedsentence = new String(receivePacket.getData()); ()); clientsocket.close(); Walter Cazzola Java Avanzato: Socket 29

Esempio Java Server (UDP) class UDPServer { public static void main(string args[]) throws Exception { DatagramSocket serversocket = new DatagramSocket(9876); // crea datagram socket alla porta 9876 byte[] receivedata = new byte[1024]; byte[] senddata = new byte[1024]; while(true) ) { // crea spazio per il datagram che dovrà ricevere DatagramPacket receivepacket = new DatagramPacket(receiveData, receivedata.length); serversocket.receive(receivepacket); // riceve datagram InetAddress IPAddress = receivepacket.getaddress(); // recupera IP e porta del mittente int port = receivepacket.getport(); senddata = elaboratedsentence.getbytes(); // costruisce il datagram da ritornare DatagramPacket sendpacket = new DatagramPacket(sendData, senddata.length, IPAddress,, port); serversocket.send(sendpacket); // scrive datagram nel socket. Walter Cazzola Java Avanzato: Socket 30