Programmare con le Socket TCP



Похожие документы
Programmare con le Socket

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

Reti di Calcolatori:

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

Parte II: Reti di calcolatori Lezione 10

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

Il Linguaggio Java: Socket.

Datagrammi. NOTA: MulticastSocket estende DatagramSocket

Corso di Reti di Calcolatori

Corso di Reti di Calcolatori. Datagrammi

Telematica II 12. Esercitazione/Laboratorio 4

Corso di Reti di Calcolatori L-A

Architettura Client-Server

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

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

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRVWUHDP

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

Programmazione dei socket con TCP #2

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

Corsi di Reti di Calcolatori (Docente Luca Becchetti)

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

R.Focardi Laboratorio di Ingegneria del Software 6. 1

Fondamenti di Internet e Reti. Achille Pattavina, Francesco Musumeci

Corso sul linguaggio Java

Applicazioni distribuite

Applicazioni web. Parte 5 Socket

MagiCum S.r.l. Progetto Inno-School

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

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

Applicazioni di rete. Applicazioni di rete

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

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

Esercizio 2. Client e server comunicano attraverso socket TCP

appunti delle lezioni Architetture client/server: applicazioni server

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

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

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

appunti delle lezioni Architetture client/server: applicazioni client

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

Altri tipi di connessione

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

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

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

Introduzione alle applicazioni di rete

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

Esempi di programmi client/server in Python

Rete Internet Prova in Itinere Mercoledì 23 Aprile 2008

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

Il linguaggio Java I file sequenziali

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

Cenni di programmazione distribuita in C++ Mauro Piccolo

Socket & RMI Ingegneria del Software - San Pietro

Networking. Mauro Migliardi Ph. D.

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

UnicastRemoteObject. Massimo Merro Programmazione di Rete 103 / 124

Esercitazione: Socket Java senza connessione

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

Programmazione distribuita in Java. Socket & Client-Server

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

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

TECNOLOGIE E PROGETTAZIONE DI SISTEMI INFORMATICI E DI TELECOMUNICAZIONI

NAT NAT NAT NAT NAT NAT. Internet. Internet. router. router. intranet. intranet. Internet. Internet. router. router. intranet. intranet.

Транскрипт:

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 1

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 m Un server può interagire con molti client contemporaneamente m 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 2

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. 3

Gli Stream delle socket TCP 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 Processo B input output stream stream infromb outtob Socket Socket outtoa infroma output input stream TCP socket TCP socket stream 4

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 5

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

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()); 7

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(); 8

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())); 9

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 10

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 11

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 Crea una socket, clientsocket = DatagramSocket() Crea, indirizza (hostid, port=x) Invia il datagramma di richiesta usando clientsocket Scrive le risposte su serversocket Specificando indirizzo IP e porta del client Legge la risposta da clientsocket chiude clientsocket 12

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 13

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(); 14

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(); 15

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

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(); String capitalizedsentence = sentence.touppercase(); Crea un datagramma da mandare al client Scrive il datagramma Sulla socket 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 17