• Non ci sono risultati.

Enrico Denti - Univ

N/A
N/A
Protected

Academic year: 2021

Condividi "Enrico Denti - Univ"

Copied!
16
0
0

Testo completo

(1)

Franco Zambonelli, Enrico Denti PROGRAMMAZIONE DI RETE IN JAVA1 Università degli Studi di Modena e Reggio Emilia

Facoltà di Ingegneria

CORSO DI

FONDAMENTI DI INFORMATICALinguaggio Java: LaProgrammazione di Rete

Ing. Franco Zambonelli

Lucidi realizzati in collaborazione conIng. Enrico Denti - Univ. Bologna

Anno Accademico 1999/2000

Franco Zambonelli, Enrico Denti PROGRAMMAZIONE DI RETE IN JAVA2 JAVA E LA RETE

L’architettura Java è network-readyPackage java.netConcetti (classi) fondamentali:Socket, ServerSocketURL, AudioClip, ImagePackage java.rmiUso di oggetti remoti: si possono richiedere servizi aoggetti che risiedono su altri nodi della rete Internet...

(2)

Franco Zambonelli, Enrico Denti PROGRAMMAZIONE DI RETE IN JAVA3 URL E CONNESSIONI

La classe URL cattura il concetto di indirizzo Internet(URL) nella forma standard:http://localhost/index.htmlfile:///autoexec.bat...Un oggetto URLsi crea a partire dall’indirizzo cherappresenta:

URL url = new URL("....");

e si usa per aprire una connessione verso tale indirizzo.Per aprire una connessione, si invoca sul-l’oggetto URL ilmetodo openConnection():

URLConnection c = url.openConnection();Il risultato èun oggetto URLConnection,cherappresenta una “connessione apertain pratica, così facendo si è stabilito un canale dicomunicazione verso l’indirizzo richiesto

Franco Zambonelli, Enrico Denti PROGRAMMAZIONE DI RETE IN JAVA4 URL E CONNESSIONI

Il fatto di avere aperto la connessione non significa checi si è veramente connessi. Per connettersi tramite taleconnessione:

c.connect();

Per comunicare si recuperano dalla connessione i duestream (di ingresso e di uscita) a essa associati, tramite imetodi:

public InputStream getInputStream() restituisce lo stream di input da cui leggere i dati(byte) che giungono dall’altra parte

public OutputStream getOutputStream()restituisce lo stream di output su cui scrivere i dati(byte) da inviare all’altra parte

Poi, su questi stream si legge / scrive come su qualunquealtro stream di byte.

(3)

Franco Zambonelli, Enrico Denti PROGRAMMAZIONE DI RETE IN JAVA5 ESEMPIO DI USO DI URL

Connettersi all’URL dato e, nell’ipotesi cheesso invii testo, visualizzarne il contenuto

import java.io.*; import java.net.*;class EsempioURL {public static void main(String args[]){URL u = null;try {u = new URL(args[0]);//indirizzo di URL passato come argomento} catch (MalformedURLException e) { System.err.println("URL errato: " + u);}URLConnection c = null;try { System.out.print("Connecting...");c = u.openConnection(); c.connect(); System.out.println("..OK"); InputStreamReader is = new InputStreamReader(c.getInputStream()); BufferedReader r = newBufferedReader(is); System.out.println("Reading data..."); String line = null; while((line=r.readLine())!=null) System.out.println(line);} catch (IOException e) { System.err.println(e);} } }

Franco Zambonelli, Enrico Denti PROGRAMMAZIONE DI RETE IN JAVA6 ESEMPIO DI USO DI URL

Esempio invocazione e output programma precedente:

D:\esercizi>java EsempioURL file:///P.html

Connecting...OK

Reading data...

<TITLE> Esempio di form </TITLE><H1> Esempio di form </H1><FORM METHOD="POST"ACTION="http://localhost/cgi/prova.exe">Inserisci il testo: <INPUT NAME="testo">e poi premi invio: <INPUT TYPE="submit"VALUE="invio"></FORM>

NOTA: Se avessimo la possibilitá di trasformare in forma graficaquello che il programma legge dall’URL avremmo praticamenterealizzato un Browser Web.Se avessimo uno schermo grafico, su cuipoter mostrare font, colori, stili... questosarebbe un browser Internet!

Non è difficile farlo... se tutta la parte direte è già pronta!!

(4)

Franco Zambonelli, Enrico Denti PROGRAMMAZIONE DI RETE IN JAVA7 IL CONCETTO DI SOCKET

Una socket è concettualmente una porta, una “presaverso la reteCollega un certo processo al mondo esterno

È identificata da un numero (port number) unico su unadata macchina (nodo o host)

Ogni nodo è identificato dal suo indirizzo IP

COMUNICAZIONE VIA SOCKET

La socket è un canale di comunicazionePermette a due processi, residenti sulla stessa macchinao anche molto distanti, di comunicare fra loro nello stessomodoModello cliente / servitore:

il servitore deve stare in attesa di possibilicomunicazioni in arrivo (ente passivo)

i clienti (anche più di uno), quando vogliono, parlanocon il servitore (enti attivi) ProcessoAsocket

porta nodo: indirizzo IP

Franco Zambonelli, Enrico Denti PROGRAMMAZIONE DI RETE IN JAVA8 COMUNICAZIONE VIA SOCKET

Per realizzare Schemi cliente-servitore Processo A

socket

porta nodo: indirizzo IP

ProcessoB

socket nodo: indirizzo IP

Internet(TCP/IP)porta

nodo

...richiesta servizio... < attesa risposta >...ricezione risposta... ProcessoCliente nodo

...< attesa richiesta >ricezione richiesta... < servizio >...invio risposta... ProcessoServitore

(5)

Franco Zambonelli, Enrico Denti PROGRAMMAZIONE DI RETE IN JAVA9 TIPI DI SOCKETEsistono fondamentalmente due tipi di socket: socketstream e socket datagramLe socket streamsono affidabili, stabiliscono una connessione stabilee bidirezionale con l’altra parte, che dura finché nonsi decide di chiuderla

Le socket datagramnon sono affidabili, non stabiliscono unaconnessione stabile: la comunicazione èunidirezionale come un telegrammama sono meno costose Usare quando l’ordine dei messaggi è importante el’affidabilità è crucialeSpesso c’è un limite massimo alle connessioni che sipossono aprire

Usare quando le prestazioni sono fondamentali e/o civorrebbero troppe connessioni aperte insiemeNon devono esserci problemi se i messaggi arrivano inordine qualunque

Franco Zambonelli, Enrico Denti PROGRAMMAZIONE DI RETE IN JAVA10 SCHEMA COMUNICAZIONE CONSOCKET STREAM

1) Il servitore crea la sua ServerSocket con un numeronoto, e si mette in attesa

2) Un cliente, quando vuole comunicare col servitore, creala sua Socket specificando con chi vuole parlare

nome dell’host

numero di porta

3) Il servitore accetta la richiesta del cliente: con csi creauna Socketgcollegata al cliente, tramite cui i duecomunicano.

Alla Socket sono associati due stream:

uno dal cliente verso il servitore

uno dal servitore verso il clienteLa comunicazione cliente/servitore è bidirezionale

i ruoli “clientee “servitoresono tali solo nella faseiniziale, quando si instaura la connessione

una volta connessi, i due processi si parlanoreciprocamente “alla pari”

(6)

Franco Zambonelli, Enrico Denti PROGRAMMAZIONE DI RETE IN JAVA11 SCHEMA CON SOCKET STREAM

La ServerSocketserve per stare in attesa dirichieste dai clienti: quando ne arriva una,l’effettiva comunicazioneavviene tramite unanuova Socket appositamente creata

La ServerSocket serve per stare in attesa dirichieste dai clienti: quando ne arriva una,l’effettiva comunicazione avviene tramite unanuova Socket appositamente creata Socket Socket Client Application

Socket Socket Client ApplicationSocket Socket ServerApplicationServer

Socket Server

Socket

Socket Socket Richiesta diconnessione

Franco Zambonelli, Enrico Denti PROGRAMMAZIONE DI RETE IN JAVA12 SCHEMA COMUNICAZIONE CONDATAGRAM

1) Il servitore crea la sua DatagramSocket con un numeronoto, e si mette in attesa

2) Un cliente crea la sua DatagramSocket

3) Quando vuole inviare un messaggio al servitore, il clientegli manda un “data-gramma

nome dell’host e numero di porta

Non si crea alcuno stream stabile

comunicazione solo dal cliente al servitore

DatagramSocket Client ApplicationServerApplicationServer DatagramSocket

DatagramSocket Client Application sendMessage(“sss”)send(datagrampacket)

(7)

Franco Zambonelli, Enrico Denti PROGRAMMAZIONE DI RETE IN JAVA13 LA CLASSE Socket

Costruire una Socket significa aprire la comunicazioneverso l’altra parte

public Socket(InetAddress remoteAddr, intremotePort)

Crea una socket stream e la collega alla portaspecificata della macchina remota corrispondenteall’indirizzo IP dato

public Socket(String remoteHost, intremotePort)

Crea una socket stream e la collega alla portaspecificata della macchina remota corrispondente alnome dato

Esempio

Socket s = new Socket("mypc.unibo.it",13);

Alcuni metodi utili

public InetAddress getInetAddress()

restituisce l’indirizzo della macchina remota a cui lasocket è connessa

public InetAddress getLocalAddress()

restituisce l’indirizzo della macchina locale

public int getPort()

restituisce il numero di porta sulla macchina remotaa cui la socket è connessa

public int getLocalPort()

restituisce il numero di porta sulla macchina localea cui la socket è legata

Franco Zambonelli, Enrico Denti PROGRAMMAZIONE DI RETE IN JAVA14 LA CLASSE Socket

Per comunicare, si recuperano dalla socket i due stream (diingresso e di uscita) a essa associati, tramite i metodi:

public InputStream getInputStream()

restituisce lo stream di input da cui leggere i dati(byte) che giungono dall’altra parte

public OutputStream getOutputStream()

restituisce lo stream di output su cui scrivere i dati(byte) da inviare all’altra parte

Poi, su questi stream si legge / scrive come su qualunquealtro stream di byte.

Al termine, per chiudere la comunicazione

si chiude la Socket col metodo:

public synchronized void close()

chiude la connessione e libera la risorsa

La parola chiave synchronized non è rilevante inquesta sede (comunque vedi lucidi sui thread!).

Riferimenti

Documenti correlati

Size restituisce la dimensione di file e cartelle presenti nella cartella corrente Subfolder restutuisce l'elenco di tutte le sottocartelle presenti nella cartella corrente Type

[r]

õôõôõôõôõô õôõô õô õô

17 563 ./0123453.67893:2;??89@A=B3C83:DEFG.3/=@3F=@2113L/CA2=C;3MN3O3PQR STTUTTVUWXYZ[Y\UT]ZWTUY^YWZ_Y`ab cZV]dUXUY\UT]ZWTUY e fg\XhgdY\UT]ZWTUY ijY`ikb lXgmdUYnhTUgTUY

[r]

Altrimenti, se i thread non vengonoesplicitamente bloccati o se non fanno operazioni che implicanoattesa:•scheduling nonpreemptive se il controllo del microprocessorenon viene

[r]

FRAGILI E + LEGATE AL MODO TRADIZIONALE DI FARE LA GUERRA (...)  SOPRATTUTTO MILITARI, DALL’ALTRO MOLTIPLICA LE RAGIONI DELLA SCELTA PARTIGIANA.. - ULTERIORE SPINTA ASSAI