Socket (TCP/IP) Socket (TCP/IP) Concetto di socket. Cenni (reti)

Documenti analoghi
Programmazione distribuita in Java. Socket & Client-Server

Lezione n.7 LPR- Informatica Applicata

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

Sockets in Java. Lorenzo Gallucci

Architettura Client-Server

20/12/2010. Package java.net (Socket ServerSocket) Package java.rmi (uso di oggetti remoti)

Java in Rete. Socket in Java. Linguaggi. Corso di Laurea Ingegneria Informatica (M-Z) A.A

Socket in Java. Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A lezione 17 -

PROVA FINALE Ingegneria del software

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

Modello client-server

Lettura e scrittura - Stream

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

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRVWUHDP

Socket in Java. Modelli di comunicazione

Laboratorio di reti I: Il pacchetto java.net

Lo strato di applicazione in Internet

Principi, Modelli e Applicazioni per Sistemi Distribuiti M

Parte II: Reti di calcolatori Lezione 11 (35)

Programmazione in Rete

URL e CONNESSIONI JAVA E LA RETE COMUNICAZIONE. URL e CONNESSIONI ESEMPIO CON URL ESEMPIO CON URL

LABORATORIO di Reti di Calcolatori

Corso sul linguaggio Java

Parte II: Reti di calcolatori Lezione 13 (37)

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

Introduzione ai (Java) socket

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

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

Network Programming. Java Programming Language. Network Programming TIGA 1

Informatica. Prof. A. Longheu. Input e Output

Introduzione. Java. G. Prencipe accesso alla rete -- TCP

Applicazioni web. Parte 10 Socket. Alberto Ferrari

Java Socket LSO 2008

Corso sul linguaggio Java

TECN.PROG.SIST.INF. I Socket Roberta Gerboni

Socket & RMI Ingegneria del Software - San Pietro

MagiCum S.r.l. Progetto Inno-School

Capitolo 2: Livello di applicazione

Lettura e scrittura - Stream

I/O Streams in Java. Lorenzo Gallucci

Protocolli Internet. Canale di comunicazione. canale di comunicazione

Laboratorio reti AA 2008/2009. Dott. Matteo Roffilli Ricevimento in ufficio dopo la lezione

Lo strato di Trasporto

! " # $ % &! ' ( ) (! 9 :! ; " / < 0 < "! 9 0 & %. 0 % & =! < 0 ; <. < > > <! 9?! ". & %!

LEZIONE N.7 LPR-A INFORMATICA IL PROTOCOLLO TCP: STREAM SOCKETS

Lezione n.6. TCP: Stream Sockets. 10/11/2009 Vincenzo Gervasi

Lezione n.7. TCP: Stream Sockets 17/11/2009 Andrea Corradini

Esercitazione [7] Client/Server con Socket

API Socket di Berkeley

Alarms Android Mobile Programming Prof. R. De Prisco

Corso di Reti di Calcolatori L-A

Lezione n.4 LPR INFORMATICA APPLICATA CONNECTION ORIENTED SOCKETS

JAVA E LA RETE IL CONCETTO DI SOCKET. RETI DI CALCOLATORI Linguaggio Java: La Programmazione di Rete. già pronta!! COMUNICAZIONE VIA SOCKET CORSO DI

Sistemi Operativi Teledidattico

Organizzazione della lezione. Lezione 10 Interprocess Communication in Java. Gli obiettivi del middleware. Middleware

Altri tipi di connessione

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

Capitolo 13 Java IO. Software per TLC - AA 2008/2009 1

Agent and Object Technology Lab Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma. Ingegneria del software A

Standard I/O. Franco Maria Nardini

ALTRI TIPI DI CONNESSIONE

Applicazioni web. Parte 5 Socket

Organizzazione della lezione

Programmazione ad Oggetti

Parte II: Reti di calcolatori Lezione 13 (37)

LEZIONE N.5 LPR INFORMATICA APPLICATA CONNECTION ORIENTED SOCKETS (2)

Programmazione dei socket con TCP #2

A. Ferrari Java: Stream e File

Laboratorio Reti di Calcolatori Laurea Triennale in Comunicazione Digitale. Anno Accademico 2012/2013

Livello di trasporto:

INPUT OUTPUT

Parte II: Reti di calcolatori Lezione 12 (36)

Scrittura dei programmi applicativi di rete

Programmare con le Socket TCP

Lezione n.7 LPR Informatica Applicata Il Protocollo TCP Stream Socket. 20/04/2009 Laura Ricci

Reti (già Reti di Calcolatori )

Laboratorio di Sistemi Applicazioni distribuite Java

Programmazione di rete in Java Java fornisce per la gestione della comunicazione le classi del package di networking java.net

Programmare con le Socket

MODELLI ISO/OSI e TCP/IP

domenica 9 giugno 13 Serializzazione

La paninoteca. Mi resta da scrivere solo costo()

Parte II: Reti di calcolatori Lezione 12

Reti di Calcolatori:

MODELLI ISO/OSI e TCP/IP

Multithreading. Multithreading/2

INPUT OUTPUT Programmazione in rete e laboratorio. Le operazioni di I/O avvengono attraverso stream (sequenze di byte)

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

Applicazioni distribuite

Le Reti Informatiche

Reti di Calcolatori. Esercitazione su: Crittografia & Bet Server. A.A. 2010/2011 Reti di Calcolatori 1 (Es. 6)

Esercizio Trasferimento File e Multicast

Livello di trasporto: meccanismi trasferimento dati affidabile, TCP

Lezione n.3 LPR - Informatica Applicata

Esercitazione [7] Server multi-process/multi-thread

Transcript:

Socket (TCP/IP) M. Danelutto LPRb A.A. 2007-2008 Socket (TCP/IP) M. Danelutto LPRb A.A. 2007-2008 Concetto di socket Astrazione presa di rete Comunicazione fra processi su macchine diverse O fra processi della stessa macchina Supportato da protocolli di tipo diverso Cenni (reti) Protocolli TCP/IP (trasporto/rete) astrazione di stream bidirezionale Protocolli UDP/IP astrazione a scambio di messaggi Li vedrete abbondantemente nel corso di reti

Comunicazione (stream) Modello di comunicazione ProcA Protocolli Macchina A Canale logico Canale fisico ProcB Protocolli Macchina B Orientato alla connessione apertura della connessione connessione + accettazione flusso bidirezionale (Input/OutputStream) chiusura della connessione Apertura della connessione Asimmetria server: pubblica un socket (indirizzo) client: si connette ad un socket server: accetta la connessione Connessione può fallire indirizzo sbagliato, server non pronto,... Indirizzi da utilizzare Indirizzi IP (fwd: corso di reti) IPv4: 32 bit (4 byte: 131.114.11.234) IPv6: 128 bit (8 * 16 bit hex 1000:23ef: 1e10:3432::1f1f) Numero di porta (16 bit) Indirizzo = < IPnumber, port >

Numeri di porta 0-1024 : riservate (di sistema) 80 http, 443 https, 22 ssh, 21 ftp, 25 smtp,... 1024-65535 : effimere alcune sono utilizzate comunque 8080 proxy web Indirizzi: IPnumber Associazione unica mantenuta fra nomi e IP da autorità mondiale (evita conflitti) Dal nostro punto di vista InetAddress ipnumber = InetAddress.getByName ( nomemacchina ); throws UnknownHostException Utilizzo connessione Client e server ottengono InputStream e OutputStream read/write sugli stream esattamente come se fossero stream su disco possibilità di sovrapporre diversi tipi di I/ O buffered, object,... Chiusura della connessione operazioni esplicite sui socket sottintendono chiusura stream associati

Come funziona (logico) API Java (java.net) B A Pubblicazione di un socket (lato server) ServerSocket ss = new ServerSocket(int port) rende disponibile un socket (server) su cui si possono attaccare altri processi (clienti) Varianti new ServerSocket() porta scelta dal sistema ss.getlocalport() Java API (java.net) accettazione della connessione ServerSocket ss =... ; Socket s = ss.accept(); chiamata bloccante ritorna quando qualcuno si è connesso al server socket

Java API (java.net) Connessione a un processo che ha pubblicato un server socket Socket s = new Socket(InetAddress ia, int port); throws IOException in caso di errore Fase di connessione server client ServerSocket ss = new ServerSocket(port); Socket s = ss.accept(); Socket s = new Socket(ip,port); Java API (java.net) instaurazione del canale bidirezionale di tipo stream lato client e lato server Socket s =... ; // new Socket(...) o accept() InputStream is = s.getinputstream(); OutputStream os = s.getoutputstream(); Scrittura dati su socket write(byte[] buffer, int offset, int len); scrive len byte di buffer a partire da offset write(byte[] buffer); scrittura non bufferizzata protocollo TCP/IP garantisce il delivery (a meno di eccezioni)

Lettura dati da socket int read(byte[] buffer, int offset, int len); legge nel buffer un massimo di len bytes a partire da offset (BLOCCANTE!) restituisce il numero di byte letti o -1 se non c e nient altro da leggere non necessariamente (su InputStream da socket) legge len bytes!!! Lettura (2) while (letti!= tutti) { lettiora = read(buffer, offset, maxbuf); if(lettiora > 0) { letti += lettiora; offset+=lettiora; maxbuf -= lettiora; } else break; } BufferedStream BufferedStream (2) BufferedReader in = new BufferedReader( new InputStreamReader(s.getInputStream()); BufferedWriter out = new BufferedWriter( new OutputStreamReader(s.getOutputStream ()); String s = in.readline(); ATTENZIONE buffering in generale non controllabile su socket sono implementati con buffering diverso...

Chiusura della connessione Socket s =... ; s.close(); chiude la connessione corrente va fatta lato client e lato server Applicazioni client/server N clienti 1 server Server: pubblica ServerSocket accetta richieste di connessione forka un thread per ogni richiesta di connessione Ruolo del server Parte importante dell applicazione senza il server non hanno senso i clienti Protocollo di comunicazione del server definisce la modalità di fruizione del servizio Client Devono seguire il protocollo del server possono essere sviluppati indipendentemente Esempio: client HTTP stabilisce connessione su porta 80 e manda un HTTP 1.0 GET filename (vedi corso di reti)

Server tipico (singlethreaded) ServerSocket ss =... while(true) { Socket s = ss.accept(); InputStream is = s.getinputstream(); OutputStream os = s.getoutputstream (); // legge richiesta dal client // prepara risposta e la scrive s.close(); Server tipico (multithreaded) ServerSocket ss =... while(true) { Socket s = ss.accept(); Thread t = new ThreadHandler(s); t.start(); } normalmente utilizza un threadpool... Caratteristiche del canale Tutto quello che scrivo su un socket arriva sul socket destinazione Se ho errori, in generale avrò un eccezione Non garanzie sui tempi di delivery Problemi di ottimizzazione con TCP (fwd) Flush scrittura su OutputSocket o BufferedStream se buffered stream.flush(); provoca la spedizione effettiva dei byte scritti fino a quel momento (vedi reti fra un pò)

Appl tipiche: trasferimento file Server: pubblica socket e fa accept Client: si connette e invia nomefile CR file Server: legge nome file, lo apre e poi entra in un ciclo di copia da socket a file più file => accept in un ciclo... Appl tipiche: erogazione di un servizio Server: pubblica un socket, entra in un ciclo che comincia con accept e prosegue con la fork di un thread che tratta la connessione Client: si connette, manda il messaggio di richiesta e aspetta il messaggio di risposta Applicazione tipica: cliente di servizio std Cliente: si connette al server sulla well know port manda la richiesta attende la risposta TELNET Documentazione java.net Socket, ServerSocket, InetAddress, accept, close java.io InputStream, OutputStream, BufferedReader/Writer, read, write, readline, flush