Programmare con le Socket



Documenti analoghi
Programmare con le Socket TCP

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

Reti di Calcolatori:

Capitolo 2: Livello di applicazione

DNS: Domain Name System

DNS: Domain Name System

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

DNS: Domain Name System

Livello applicazione: P2P, programmazione socket

Livello applicazione: programmazione socket, P2P

PROVA FINALE Ingegneria del software

Parte II: Reti di calcolatori Lezione 12

Parte II: Reti di calcolatori Lezione 10

Programmazione in Rete

Il Linguaggio Java: Socket.

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

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

Datagrammi. NOTA: MulticastSocket estende DatagramSocket

Corso di Reti di Calcolatori

Corso di Reti di Calcolatori. Datagrammi

Corso di Reti di Calcolatori L-A

Telematica II 12. Esercitazione/Laboratorio 4

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

Architettura Client-Server

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRVWUHDP

Parte II: Reti di calcolatori Lezione 11 (35)

Capitolo 2 Livello di applicazione

Reti di Calcolatori. Acknowledgement. Credits. Il livello Applicazione

Programmazione dei socket con TCP #2

Parte II: Reti di calcolatori Lezione 13 (37)

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

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRGDWDJUDP

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

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

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

Parte II: Reti di calcolatori Lezione 12 (36)

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

Capitolo 2 Livello di applicazione

R.Focardi Laboratorio di Ingegneria del Software 6. 1

Corsi di Reti di Calcolatori (Docente Luca Becchetti)

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

Fondamenti di Internet e Reti. Achille Pattavina, Francesco Musumeci

Applicazioni web. Parte 5 Socket

Applicazioni distribuite

Corso sul linguaggio Java

Capitolo 2 Livello di applicazione

MagiCum S.r.l. Progetto Inno-School

Applicazioni di rete. Applicazioni di rete

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

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

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

appunti delle lezioni Architetture client/server: applicazioni server

Parte II: Reti di calcolatori Lezione 13 (37)

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

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

Introduzione alle applicazioni di rete

Corso di Reti di Calcolatori T

Esercizio 2. Client e server comunicano attraverso socket TCP

Server Sequenziale. Server Concorrente. Esercitazione: Socket Java con connessione

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

Altri tipi di connessione

appunti delle lezioni Architetture client/server: applicazioni client

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

Principi, Modelli e Applicazioni per Sistemi Distribuiti M

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

Rete Internet Prova in Itinere Mercoledì 23 Aprile 2008

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

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

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

Networking. Mauro Migliardi Ph. D.

Applicazioni di rete

Socket & RMI Ingegneria del Software - San Pietro

Esempi di programmi client/server in Python

Utilizzo delle classi

Cenni di programmazione distribuita in C++ Mauro Piccolo

UnicastRemoteObject. Massimo Merro Programmazione di Rete 103 / 124

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

Il linguaggio Java I file sequenziali

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

Principi, Modelli e Applicazioni per Sistemi Distribuiti M

Capitolo 2 Livello di applicazione

Applicazioni web. Parte 10 Socket. Alberto Ferrari

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

Livello di trasporto:

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

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

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

Reti di Telecomunicazione Lezione 8

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

Un flusso (stream) è una astrazione che produce e/o consuma informazioni.

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

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

Corsi di Reti di Calcolatori (Docente Luca Becchetti) Esercizi su strati di trasporto e di rete

Lezione n.7 LPR- Informatica Applicata

Laboratorio di Programmazione in rete

Esercitazione: Socket Java senza connessione

Transcript:

Programmare con le Socket Corso Reti ed Applicazioni Lab Sockets pag. 1

Programmare con le Socket TCP Il Client deve contattare il server - Il processo server deve già essere attivo - Il server deve aver creato una socket che accetta la connessione del client ( socket di benvenuto ) Il Client: - Crea una socket TCP locale - Specifica l indirizzo IP e numero di porta del processo server - Quando il client crea la socket: il lato client TCP stabilisce una connessione con il server TCP Lab Sockets pag. 2

Programmare con le Socket TCP Quando viene contattato dal client, il server TCP crea una nuova socket per far comunicare il processo server con il client - Un server può interagire con molti client contemporaneamente - Il numero di porta sorgente è usato per distinguere diversi client Dal punto di vista dell applicazione TCP fornisce un trasferimento di byte (un tubo ) affidabile e ordinato tra client e server Dopo che è stata stabilita la connessione, le socket usate dal client e dal server sono equivalenti Lab Sockets pag. 3

Gli Stream - gergo - Uno stream (flusso) è una sequenza di caratteri che fluisce verso un processo o da un processo - Un input stream è collegato a qualche sorgente di input del processo, come la tastiera, un file o una socket. - Un output stream è collegato a qualche destinazione di output, come il monitor, un file o una socket. Lab Sockets pag. 4

Quando due processi hanno stabilito una connessione TCP usando le socket, l input stream della socket nel processo A è collegato all output stream della socket corrispondente nel processo B, e viceversa Processo A Gli Stream delle socket TCP Processo B input stream output stream infromb outtob Socket Socket outtoa infroma output input stream TCP socket TCP socket stream Lab Sockets pag. 5

Programmazione con le socket TCP Esempio di applicazione clientserver: 1) Il client legge una riga dallo reads standard input (stream infromuser), e la manda al server usando la socket (stream outtoserver ) 2) Il server legge la riga dalla socket 3) Il server converte la riga in caratteri maiuscoli, e la rimanda indietro al client 4) Il client legge dalla socket (stream infromserver ) la riga modificata, e la stampa Process Client process input stream output stream keyboard infromuser outtoserver monitor infromserver client TCP clientsocket socket input stream TCP socket to network from network Lab Sockets pag. 6

Interazione Client/server con le socket : TCP Server (in esecuzione su hostid) Crea una socket, port=x, per le richieste in arrivo: welcomesocket = ServerSocket(x) Attende richieste di connessione in ingresso connectionsocket = welcomesocket.accept() Legge la richiesta da connectionsocket Scrive la risposta su connectionsocket chiude connectionsocket TCP connection setup Client Crea una socket, Connessa a hostid, port=x clientsocket = Socket(hostid, port) Invia la richiesta usando clientsocket Legge la risposta da clientsocket chiude clientsocket Lab Sockets pag. 7

Esempio: Java client (TCP) import java.io.*; import java.net.*; class TCPClient { Crea un input stream Crea la socket client, Connessa al server Crea un output stream Connesso alla 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()); Lab Sockets pag. 8

Esempio: Java client (TCP), cont. Crea un input stream Connesso alla socket Manda una riga al server Legge una riga dal 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(); Lab Sockets pag. 9

Esempio: Java server (TCP) import java.io.*; import java.net.*; class TCPServer { Crea una socket di benvenuto Sulla porta 6789 Aspetta sulla socket di benvenuto il contatto del client Crea un input stream, connesso alla socket 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())); Lab Sockets pag. 10

Esempio: Java server (TCP), cont Crea un output stream, connesso alla socket Legge una riga dalla socket Scrive una riga sulla socket DataOutputStream outtoclient = new DataOutputStream(connectionSocket.getOutputStream()); clientsentence = infromclient.readline(); capitalizedsentence = clientsentence.touppercase() + '\n'; outtoclient.writebytes(capitalizedsentence); Fine del loop while Torna all inizio in attesa di una nuova connessione Lab Sockets pag. 11

Programmazione con le socket UDP UDP: non c è connessione tra client e server - Non è necessario stabilire la connessione - Il mittente inserisce esplicitamente l indirizzo IP e la porta della destinazione in ogni pacchetto - Il server deve estrarre l indirizzo IP e la porta del mittente dal pacchetto ricevuto Punto di vista dell applicazione: - UDP fornisce un trasferimento non affidabile di gruppi di byte ( datagrammi ) tra client e server UDP: i dati ricevuti possono essere persi o ricevuti fuori ordine Lab Sockets pag. 12

Interazione Client/server con le socket: UDP Server (in esecuzione su hostid) Client Crea una socket, port=x, per le richieste in arrivo: serversocket = DatagramSocket(x) Legge le richieste da serversocket Scrive le risposte su serversocket Specificando indirizzo IP e porta del client Crea una socket, clientsocket = DatagramSocket() Crea, indirizza (hostid, port=x) Invia il datagramma di richiesta usando clientsocket Legge la risposta da clientsocket chiude clientsocket Lab Sockets pag. 13

Esempio: Java client (UDP) keyboard monitor Process Client process Output: invia un pacchetto (TCP mandava un flusso di byte ) input stream UDP packet infromuser sendpacket receivepacket client UDP clientsocket socket UDP packet UDP socket Input: riceve un pacchetto (TCP riceveva un flusso di byte ) to network from network Lab Sockets pag. 14

Esempio: Java client (UDP) import java.io.*; import java.net.*; Crea un input stream Crea la client socket Traduce hostname in un indirizzo IP usando il DNS class UDPClient { public static void main(string args[]) throws Exception { BufferedReader infromuser = new BufferedReader(new InputStreamReader(System.in)); DatagramSocket clientsocket = new DatagramSocket(); InetAddress IPAddress = InetAddress.getByName("hostname"); byte[] senddata = new byte[1024]; byte[] receivedata = new byte[1024]; String sentence = infromuser.readline(); senddata = sentence.getbytes(); Lab Sockets pag. 15

Esempio : Java client (UDP), cont. Crea un datagramma con i dati, lunghezza, indirizzo IP, porta Invia il datagramma to server Legge il datagramma dal 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(); Lab Sockets pag. 16

Esempio : Java server (UDP) import java.io.*; import java.net.*; Crea una socket datagramma Sulla porta 9876 Crea spazio per il datagramma ricevuto Rieceve il datagramma 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]; while(true) { DatagramPacket receivepacket = new DatagramPacket(receiveData, receivedata.length); serversocket.receive(receivepacket); Lab Sockets pag. 17

Esempio : Java server (UDP), cont Determina indirizzo IP e porta del mittente String sentence = new String(receivePacket.getData()); InetAddress IPAddress = receivepacket.getaddress(); int port = receivepacket.getport(); Crea un datagramma da mandare al client Scrive il datagramma Sulla socket String capitalizedsentence = sentence.touppercase(); senddata = capitalizedsentence.getbytes(); DatagramPacket sendpacket = new DatagramPacket(sendData, senddata.length, IPAddress, port); serversocket.send(sendpacket); Fine del loop while torna all inizio e attendi un altro datagramma Lab Sockets pag. 18