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
© Copyright 2024 ExpyDoc