Presentazione del corso

Le Socket in Java
Corso di laurea in Informatica
Laboratorio di Reti di Calcolatori
A.A. 2014-2015
Simone Bassis
[email protected]
Laboratorio di Reti di Calcolatori (Informatica) - A.A. 2014-2015
S. Bassis ([email protected])
Università di Milano – DI
Classi e socket
o Java nasconde al programmatore tutti
i dettagli implementativi, anche per
quanto riguarda la rete
o In questo modo è possibile concentrarsi sui
servizi e non dover re-inventare la ruota
ogni volta
o Ci sono una manciata di classi da
conoscere per poter usare le socket in
java
Laboratorio di Reti di Calcolatori (Informatica) - A.A. 2014-2015
S. Bassis ([email protected])
Università di Milano – DI
85
1
Vero ma…
o
In tutte le classi che manipolano socket le
funzionalità di base sono implementate in un’istanza
di una sottoclasse di SocketImpl (o
DatagramSocketImpl)
o Che a sua volta implementano SocketOptions
o
Implementazione di base di SocketImpl accede
direttamente alla rete ma potreste
o dover accedervi tramite proxy
o dover considerare la presenza di firewall
o
E i vantaggi?
Laboratorio di Reti di Calcolatori (Informatica) - A.A. 2014-2015
S. Bassis ([email protected])
Università di Milano – DI
86
SocketImpl
Socket
o
Istanza di una sottoclasse
di SocketImpl
E se in futuro mettono un firewall o un proxy? Devo rifare
daccapo l’applicazione Java?
Creo una istanza sif di
SocketImplFactory che mi
produca SocketImpl con
nuove funzionalità
Con
Socket.setSocketImplFactory(sif)
istruisco Java a creare Socket
basate sulla nuova SocketImpl e…
Socket
Con Socket s = new Socket()
Laboratorio di Reti di Calcolatori (Informatica) - A.A. 2014-2015
S. Bassis ([email protected])
Università di Milano – DI
87
2
Le diverse Socket in Java
o
Domini
o Esiste solo IP
• IPv4 o IPv6?
• Entrambi, cambia solo l’istanza di SocketAddress
o Nemmeno il dominio Unix è implementato
o
Modalità di trasferimento dati e protocolli
o Byte-stream e protocollo TCP
• Socket lato server
java.net.ServerSocket
• Socket lato client
java.net.Socket
o Datagram e protocollo UDP
java.net.DatagramSocket
Laboratorio di Reti di Calcolatori (Informatica) - A.A. 2014-2015
S. Bassis ([email protected])
Università di Milano – DI
88
Su TCP e UDP
o
La classe java.lang.Socket (lato client) può essere
usata per semantiche sia TCP che UDP, basta mettere
un terzo parametro booleano a false
o Questo però è deprecato (sconsigliato)
o
Meglio usare
o Per TCP:
o Per UDP:
o
java.net.Socket (java.net.ServerSocket)
java.net.DatagramSocket
E la DatagramServerSocket ?
o Non esiste perché non serve
Laboratorio di Reti di Calcolatori (Informatica) - A.A. 2014-2015
S. Bassis ([email protected])
Università di Milano – DI
89
3
Binding
Binding esplicito
Su netstat…
Local address
*.7000
remote address
*.*
Laboratorio di Reti di Calcolatori (Informatica) - A.A. 2014-2015
S. Bassis ([email protected])
Università di Milano – DI
state
CLOSED
90
Binding
Binding esplicito prima porta disponibile
Per conoscere la porta locale
Utile sui server
Java non offre la possibilità di riferirsi al nome della porta
piuttosto che al numero… perché?
Laboratorio di Reti di Calcolatori (Informatica) - A.A. 2014-2015
S. Bassis ([email protected])
Università di Milano – DI
91
4
Associazione di due socket
Lato ricevente: modalità connessa
1. il binding
ServerSocket l = new ServerSocket(80);
o
L’instanza l verrà usata per instaurare delle connessioni con i client
2. setup della connessione
La accept è bloccante!
Socket s = l.accept();
o
o
o
Il server avrà in mano due socket, una per accettare (i prossimi)
client e l’altra per scambiare dati con il client appena arrivato
Quindi … anche il server alla fine si ritrova ad usare una istanza di
java.net.Socket per parlare con il client
d’altronde, se netstat ci dà due informazioni distinte si può anche
pensare che ce ne sia una per ogni classe
Laboratorio di Reti di Calcolatori (Informatica) - A.A. 2014-2015
S. Bassis ([email protected])
Università di Milano – DI
92
Lato ricevente
Porta allocata: 50226
Local address
*.50226
Laboratorio di Reti di Calcolatori (Informatica) - A.A. 2014-2015
S. Bassis ([email protected])
Università di Milano – DI
remote address
*.*
(state)
LISTEN
93
5
Rapido ed indolore
Lato chiamante: modalità connessa
1. Connessione a un passo
Socket c1 = new Socket(“www.unimi.it”, 80);
Socket c2 = new Socket(“159.149.155.85”, 80);
Tramite connect()
InetSocketAddress isa = new InetSocketAddress(“www.unimi.it”,80);
Socket c3 = new Socket();
c3.connect(isa);
o
Come per una bind, ma l’indirizzo di trasporto specificato non è quello locale
Laboratorio di Reti di Calcolatori (Informatica) - A.A. 2014-2015
S. Bassis ([email protected])
Università di Milano – DI
94
Trasferimento dati
Socket connesse
o
La classe socket fornisce due metodi
o InputStream Socket.getInputStream();
o OutputStream Socket.getOutputStream();
o
o
Le istanze restituite possono essere utilizzate
per ricevere ed inviare dati attraverso la socket
Sono canali di I/O monodirezionali
Laboratorio di Reti di Calcolatori (Informatica) - A.A. 2014-2015
S. Bassis ([email protected])
Università di Milano – DI
95
6
Lettura e Scrittura
La read è bloccante!
Laboratorio di Reti di Calcolatori (Informatica) - A.A. 2014-2015
S. Bassis ([email protected])
Università di Milano – DI
96
Chiusura Socket
o Può essere
o Esplicita
• Usando il metodo close()
o Implicita
• Effettuata dal garbage collector quando l’istanza della
socket non è più visibile
• Ovvero al termine del processo che gestisce il canale
stesso
o È sempre opportuno effettuare una chiusura
esplicita!
Laboratorio di Reti di Calcolatori (Informatica) - A.A. 2014-2015
S. Bassis ([email protected])
Università di Milano – DI
97
7
Gli altri linguaggi …
o
Pretendono che si sappiano gestire tutti i possibili
meccanismi e le impostazioni
o
o
o
o
o
o
Per
Per
Per
Per
…
l’indirizzamento
la conversione esplicita di nomi in indirizzi
la semantica di comunicazione
la gestione degli errori
Una socket è un file desciptor generico (opaco) con
una serie di parametri accessori
o
…an opaque data type is a data type that is incompletely defined in an interface,
so that its values can only be manipulated by calling subroutines that have
access to the missing information. The concrete representation of the type is
hidden from its users…
… soprattutto per il C
Laboratorio di Reti di Calcolatori (Informatica) - A.A. 2014-2015
S. Bassis ([email protected])
Università di Milano – DI
98
8