Reti di Calcolatori:



Documenti analoghi
Programmare con le Socket

Programmare con le Socket TCP

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

DNS: Domain Name System

Capitolo 2: Livello di applicazione

DNS: Domain Name System

DNS: Domain Name System

Programmazione in Rete

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

DNS: Domain Name System

DNS: Domain Name System

Livello applicazione: P2P, programmazione socket

Livello applicazione: programmazione socket, P2P

Parte II: Reti di calcolatori Lezione 12

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

PROVA FINALE Ingegneria del software

Parte II: Reti di calcolatori Lezione 10

Datagrammi. NOTA: MulticastSocket estende DatagramSocket

Il Linguaggio Java: Socket.

Applicazioni di rete. Applicazioni di rete

Esempi di programmi client/server in Python

Corso di Reti di Calcolatori

Corso di Reti di Calcolatori. Datagrammi

Reti di Calcolatori. Il livello Applicazione. A.A. 2010/2011 Laurea in Informatica

Telematica II 12. Esercitazione/Laboratorio 4

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRVWUHDP

Architettura Client-Server

Applicazioni di rete

Reti di calcolatori e Internet: Un approccio top-down. 4 a edizione Jim Kurose, Keith Ross 2-1

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRGDWDJUDP

Parte II: Reti di calcolatori Lezione 11 (35)

Programmazione dei socket con TCP #2

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

Fondamenti di Internet e Reti. Antonio Capone, Achille Pattavina, Francesco Musumeci, Matteo Cesana

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

Fondamenti di Internet e Reti. Achille Pattavina, Francesco Musumeci

Parte II: Reti di calcolatori Lezione 13 (37)

Capitolo 2 Livello di applicazione

Reti di Calcolatori. Acknowledgement. Credits. Il livello Applicazione

Corso di Reti di Calcolatori L-A

Parte II: Reti di calcolatori Lezione 12 (36)

R.Focardi Laboratorio di Ingegneria del Software 6. 1

Di seguito si riporta il codice necessario per la verifica in oggetto:

Applicazioni web. Parte 5 Socket

Capitolo 2 Livello di applicazione

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

Introduzione alle applicazioni di rete

Reti di Calcolatori:

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

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

Cenni di programmazione distribuita in C++ Mauro Piccolo

Corso sul linguaggio Java

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

Altri tipi di connessione

Programmazione in Rete

Parte II: Reti di calcolatori Lezione 13 (37)

Livello di trasporto:

Capitolo 2 Livello di applicazione

Corsi di Reti di Calcolatori (Docente Luca Becchetti)

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

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

Java Socket LSO 2008

Networking. Mauro Migliardi Ph. D.

MagiCum S.r.l. Progetto Inno-School

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

Applicazioni distribuite

Transmission Control Protocol

Reti di Calcolatori. Seconda lezione. Realizzato da Roberto Savino: 1

appunti delle lezioni Architetture client/server: applicazioni server

Protocolli Internet. Canale di comunicazione. canale di comunicazione

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

appunti delle lezioni Architetture client/server: applicazioni client

Reti di Calcolatori:

Controllo Winsock di Visual Basic

Programmazione in Rete

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

Esercizi su UDP. Esercitazione di Laboratorio di Programmazione di Rete A. Daniele Sgandurra 22/10/2008. Università di Pisa

Applicazioni web. Parte 10 Socket. Alberto Ferrari

Lezione n.7 LPR- Informatica Applicata

DATAGRAM SOCKET. Angelastro Sergio Diomede Antonio Viterbo Tommaso

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

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

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

LPR A 2005/2006 Lezione 5. Riepilogo Caratteristiche Datagram Socket Stream Mode Socket API Sockets Lato Client Sockets Lato Server Esempi

TECNOLOGIE E PROGETTAZIONE DI SISTEMI INFORMATICI E DI TELECOMUNICAZIONI

Laboratorio di reti I: Il pacchetto java.net

Esercizio 2. Client e server comunicano attraverso socket TCP

J+... J+3 J+2 J+1 K+1 K+2 K+3 K+...

27/2/2006. Lezione n.3 LPR-Informatica Applicata sockets UDP. Università degli Studi di Pisa. Laura Ricci 1. Dipartimento di Informatica.

Il client deve stampare tutti gli eventuali errori che si possono verificare durante l esecuzione.

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

Capitolo 3 Livello di trasporto

Basic Network Tutorial

Reti di Telecomunicazione Lezione 8

Prova di Esame - Rete Internet (ing. Giovanni Neglia) Lunedì 24 Gennaio 2005, ore 15.00

Tesina esame Programmazione di Sistemi Mobile realizzata da Roberto Giuliani matricola Sockets e DatagramSocket

Socket & RMI Ingegneria del Software - San Pietro

Introduzione ai (Java) socket

Socket. Nei sistemi operativi moderni i servizi disponibili in rete si basano principalmente sul modello client/server.

Esercitazione: Socket Java senza connessione

Transcript:

Reti di Calcolatori: Internet, Intranet e Mobile Computing a.a. 2007/2008 http://www.di.uniba.it/~lisi/courses/reti/reti0708.htm dott.ssa Francesca A. Lisi lisi@di.uniba.it Orario di ricevimento: mercoledì ore 10-12

Programmazione delle socket Scopo: comprendere come le applicazioni client/server comunicano attraverso le interfacce socket Socket API introdotte in BSD4.1 UNIX, 1981 esplicitamente create, usate, rilasciate dalle applicazioni paradigma client/server due tipi di servizio di trasporto via socket API: affidabile, byte streamoriented (cfr. TCP) inaffidabile, datagramoriented (cfr. UDP) socket Interfaccia host-local, application-created/owned, OS-controlled (una porta ) in cui un processo applicativo può sia inviare che ricevere messaggi da/a un altro processo applicativo (remoto o locale) dott.ssa F. A. Lisi Reti di Calcolatori Programmazione delle interfacce socket 2

Programmazione delle socket: un esempio di applicazione client/server il client legge una linea dal suo ingresso standard (tastiera) e la invia attraverso la sua socket al server il server legge una linea dalla sua socket il server converte la linea in maiuscolo il server invia al client la linea modificata facendola passare attraverso la sua socket il client legge la linea (modificata) dalla sua socket e la stampa sulla sua uscita standard (monitor) dott.ssa F. A. Lisi Reti di Calcolatori Programmazione delle interfacce socket 3

Programmazione delle socket con TCP Socket: una porta fra il processo applicativo ed il protocollo TCP per il trasporto end-to-end Servizio TCP: trasferimento affidabile di byte da un processo ad un altro Controllato dallo sviluppatore di applicazioni Controllato dal sistema operativo processo socket TCP con buffer, variabili internet processo socket TCP con buffer, variabili Controllato dallo sviluppatore di applicazioni Controllato dal sistema operativo host o server host o server dott.ssa F. A. Lisi Reti di Calcolatori Programmazione delle interfacce socket 4

Programmazione delle socket con TCP Il client deve contattare il server Il processo server deve innanzitutto essere in esecuzione il server deve aver creato una socket che accolga il contatto da parte del client Il client contatta il server: creando una socket TCP locale al client specificando indirizzo IP e numero di porta del processo server Quando il client crea la socket: il client TCP stabilisce una connessione al server TCP Se contattato dal client, il server TCP crea una nuova socket per il processo server per comunicare con il client consente al server di parlare con client multipli Punto di vista applicativo Il TCP fornisce un trasferimento affidabile, in-order di byte ( pipe ) fra client e server dott.ssa F. A. Lisi Reti di Calcolatori Programmazione delle interfacce socket 5

Programmazione delle socket con TCP: interazione client/server dott.ssa F. A. Lisi Reti di Calcolatori Programmazione delle interfacce socket 6

Programmazione delle socket con TCP: interazione client/server (cont.) Server (running on hostid) Client create socket, port=x, for incoming request: welcomesocket = ServerSocket() wait for incoming connection request connectionsocket = welcomesocket.accept() read request from connectionsocket TCP connection setup create socket, connect to hostid, port=x clientsocket = Socket() send request using clientsocket write reply to connectionsocket read reply from clientsocket close connectionsocket close clientsocket dott.ssa F. A. Lisi Reti di Calcolatori Programmazione delle interfacce socket 7

Programmazione delle socket con TCP: lato client il client legge una riga (stream in ingresso infromuser) dallo standard input (tastiera) e la invia al server in byte (stream in uscita outtoserver) attraverso la sua socket il client legge la linea modificata dalla sua socket (stream in ingresso infromserver) e la manda in stampa sullo standard output (monitor) N.B. Un flusso (stream) è una sequenza di caratteri che fluisce verso/da un processo. dott.ssa F. A. Lisi Reti di Calcolatori Programmazione delle interfacce socket 8

Programmazione delle socket con TCP: lato client in Java import java.io.*; import java.net.*; class TCPClient { Create input stream Create client socket, connect to server Create output stream attached to socket public static void main(string argv[]) throws Exception { String sentence; String modifiedsentence; BufferedReader infromuser = new BufferedReader(new InputStreamReader(System.in)); Socket clientsocket = new Socket("hostname", 6789); DataOutputStream outtoserver = new DataOutputStream(clientSocket.getOutputStream()); dott.ssa F. A. Lisi Reti di Calcolatori Programmazione delle interfacce socket 9

Programmazione delle socket con TCP: lato client in Java (cont.) Create input stream attached to socket Send line to server Read line from server BufferedReader infromserver = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); sentence = infromuser.readline(); outtoserver.writebytes(sentence + '\n'); modifiedsentence = infromserver.readline(); System.out.println("FROM SERVER: " + modifiedsentence); clientsocket.close(); } } dott.ssa F. A. Lisi Reti di Calcolatori Programmazione delle interfacce socket 10

Programmazione delle socket con TCP: lato server in Java Create welcoming socket at port 6789 Wait, on welcoming socket for contact by client Create input stream, attached to socket import java.io.*; import java.net.*; class TCPServer { public static void main(string argv[]) throws Exception { String clientsentence; String capitalizedsentence; ServerSocket welcomesocket = new ServerSocket(6789); while(true) { Socket connectionsocket = welcomesocket.accept(); BufferedReader infromclient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream())); dott.ssa F. A. Lisi Reti di Calcolatori Programmazione delle interfacce socket 11

Programmazione delle socket con TCP: lato server in Java (cont.) Create output stream, attached to socket Read in line from socket DataOutputStream outtoclient = new DataOutputStream(connectionSocket.getOutputStream()); clientsentence = infromclient.readline(); Write out line to socket } } } capitalizedsentence = clientsentence.touppercase() + '\n'; outtoclient.writebytes(capitalizedsentence); End of while loop, loop back and wait for another client connection dott.ssa F. A. Lisi Reti di Calcolatori Programmazione delle interfacce socket 12

Programmazione delle socket con UDP UDP: nessuna connessione fra client e server no handshaking il mittente attacca esplicitamente l indirizzo IP e il numero di porta del destinatario il server deve estrarre l indirizzo IP e numero di porta del mittente dal datagramma ricevuto UDP: i dati trasmessi potrebbero essere ricevuti non in ordine, o andare persi application viewpoint UDP fornisce trasferimento inaffidabile di gruppi di byte ( datagrammi ) fra client e server dott.ssa F. A. Lisi Reti di Calcolatori Programmazione delle interfacce socket 13

Programmazione delle socket con UDP: interazione client/server Server (running on hostid) Client create socket, port=x, for incoming request: serversocket = DatagramSocket() read request from serversocket create socket, clientsocket = DatagramSocket() Create, address (hostid, port=x, send datagram request using clientsocket write reply to serversocket specifying client host address, port umber read reply from clientsocket close clientsocket dott.ssa F. A. Lisi Reti di Calcolatori Programmazione delle interfacce socket 14

Programmazione delle socket con UDP: lato client il client legge una riga (stream in ingresso infromuser) dallo standard input (tastiera) e la invia in pacchetti datagram UDP (sendpacket) al server attraverso la socket il client legge il pacchetto datagram UDP contenente la linea modificata (receivepacket) attraverso la sua socket e la manda in stampa sullo standard output (monitor) dott.ssa F. A. Lisi Reti di Calcolatori Programmazione delle interfacce socket 15

Programmazione delle socket con UDP: lato client in Java Create input stream Create client socket import java.io.*; import java.net.*; class UDPClient { public static void main(string args[]) throws Exception { BufferedReader infromuser = new BufferedReader(new InputStreamReader(System.in)); DatagramSocket clientsocket = new DatagramSocket(); Translate hostname to IP address using DNS InetAddress IPAddress = InetAddress.getByName("hostname"); byte[] senddata = new byte[1024]; byte[] receivedata = new byte[1024]; String sentence = infromuser.readline(); senddata = sentence.getbytes(); dott.ssa F. A. Lisi Reti di Calcolatori Programmazione delle interfacce socket 16

Programmazione delle socket con UDP: lato client in Java (cont.) Create datagram with data-to-send, length, IP addr, port Send datagram to server Read datagram from server DatagramPacket sendpacket = new DatagramPacket(sendData, senddata.length, IPAddress, 9876); clientsocket.send(sendpacket); DatagramPacket receivepacket = new DatagramPacket(receiveData, receivedata.length); clientsocket.receive(receivepacket); } String modifiedsentence = new String(receivePacket.getData()); System.out.println("FROM SERVER:" + modifiedsentence); clientsocket.close(); } dott.ssa F. A. Lisi Reti di Calcolatori Programmazione delle interfacce socket 17

Programmazione delle socket con UDP: lato server dott.ssa F. A. Lisi Reti di Calcolatori Programmazione delle interfacce socket 18

Programmazione delle socket con UDP: lato server in Java import java.io.*; import java.net.*; Create datagram socket at port 9876 class UDPServer { public static void main(string args[]) throws Exception { DatagramSocket serversocket = new DatagramSocket(9876); byte[] receivedata = new byte[1024]; byte[] senddata = new byte[1024]; Create space for received datagram Receive datagram while(true) { DatagramPacket receivepacket = new DatagramPacket(receiveData, receivedata.length); serversocket.receive(receivepacket); dott.ssa F. A. Lisi Reti di Calcolatori Programmazione delle interfacce socket 19

Programmazione delle socket con UDP: lato server in Java (cont.) String sentence = new String(receivePacket.getData()); Get IP addr port #, of sender InetAddress IPAddress = receivepacket.getaddress(); int port = receivepacket.getport(); Create datagram to send to client Write out datagram to socket } } String capitalizedsentence = sentence.touppercase(); senddata = capitalizedsentence.getbytes(); DatagramPacket sendpacket = new DatagramPacket(sendData, senddata.length, IPAddress, port); serversocket.send(sendpacket); } End of while loop, loop back and wait for another datagram dott.ssa F. A. Lisi Reti di Calcolatori Programmazione delle interfacce socket 20

Programmazione delle socket: spunti di approfondimento Un esempio di semplice server Web in Java è riportato nella sezione 2.9 di Kurose & Ross. Esercizi di programmazione delle socket in Java sono presenti in coda al capitolo 2 di Kurose & Ross Per una panoramica sul package java.net consultare http://java.sun.com/j2se/1.4.2/docs/api/java/net/package-summary.html Esperienze di programmazione delle socket in Java sono anche possibili in ambito di tesi di laurea (contattare il docente per ulteriori informazioni) dott.ssa F. A. Lisi Reti di Calcolatori Programmazione delle interfacce socket 21