Cenni di programmazione distribuita in C++ Mauro Piccolo piccolo@di.unito.it



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

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

I Socket. Laboratorio Software M. Grotto R. Farina

Esercitazione [6] Client/Server con Socket

Introduzione alle applicazioni di rete

TECNOLOGIE E PROGETTAZIONE DI SISTEMI INFORMATICI E DI TELECOMUNICAZIONI

COMUNICAZIONE TRA PROCESSI REMOTI IN UNIX

Laboratorio di Programmazione in rete

Reti di Telecomunicazioni Mobile IP Mobile IP Internet Internet Protocol header IPv4 router host indirizzi IP, DNS URL indirizzo di rete

Socket TCP. seconda parte

2.5. L'indirizzo IP identifica il computer di origine, il numero di porta invece identifica il processo di origine.

HTTP adaptation layer per generico protocollo di scambio dati

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

Standard di comunicazione

Paradigma client-server

Interconnessione di reti

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

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

Comunicazione tra Computer. Protocolli. Astrazione di Sottosistema di Comunicazione. Modello di un Sottosistema di Comunicazione

Telematica II 12. Esercitazione/Laboratorio 4

Reti di Telecomunicazione Lezione 6

Indirizzi Internet e. I livelli di trasporto delle informazioni. Comunicazione e naming in Internet

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

Sistemi Operativi (modulo di Informatica II)

Controllo Winsock di Visual Basic

Socket TCP. prima parte

IPC Inter Process Communication

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

rsystem Maximiliano Marchesi

CORSO DI RETI SSIS. Lezione n.2. 2 Novembre 2005 Laura Ricci

Transmission Control Protocol

Reti di Telecomunicazione Lezione 8

Dal protocollo IP ai livelli superiori

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

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

Una semplice applicazione client/server 1

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

Inizializzazione degli Host. BOOTP e DHCP

Program m azione di Sistem a 6

P2-11: BOOTP e DHCP (Capitolo 23)

Laboratorio di Programmazione in Rete

Nelle reti di calcolatori, le porte (traduzione impropria del termine. port inglese, che in realtà significa porto) sono lo strumento

Esercitazione [5] Input/Output su Socket

Reti (già Reti di Calcolatori )

DATAGRAM SOCKET. Angelastro Sergio Diomede Antonio Viterbo Tommaso

1. Spiegare le differenze fra le seguenti modalità di binding degli indirizzi:

Elementi di Informatica e Programmazione

Architettura del. Sintesi dei livelli di rete. Livelli di trasporto e inferiori (Livelli 1-4)

Altri tipi di connessione

ARP (Address Resolution Protocol)

TCP/IP: INDIRIZZI IP SIMBOLICI

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

Università degli Studi di Pisa Dipartimento di Informatica. NAT & Firewalls

Siti web centrati sui dati (Data-centric web applications)

Topologia delle reti. Rete Multipoint: ogni nodo è connesso agli altri tramite nodi intermedi (rete gerarchica).

Reti. Reti. IPv4: concetti fondamentali. arp (address resolution protocol) Architettura a livelli (modello OSI)

Socket & RMI Ingegneria del Software - San Pietro

MODELLI ISO/OSI e TCP/IP

Informatica per la comunicazione" - lezione 8 -

DOMOTICA ED EDIFICI INTELLIGENTI UNIVERSITA DI URBINO

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

4 - Il livello di trasporto

TeamPortal. Servizi integrati con ambienti Gestionali

I canali di comunicazione

Reti di Calcolatori. Vantaggi dell uso delle reti. Cosa è una rete? Punto di vista logico: sistema di dati ed utenti distribuito

appunti delle lezioni Architetture client/server: applicazioni client

Protocolli di Comunicazione

Gestione degli indirizzi

Interprocess Communications - II. Franco Maria Nardini

InterNet: rete di reti

INFORMATICA DISTRIBUITA. lez 4 Livello applicazione

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

Esercizio 2. Client e server comunicano attraverso socket TCP

L API socket ed i daemon

Protocolli applicativi: FTP

T42 Tunnel For Two Secure SSL InterApplication Relay Clizio Merli - 4u Srl S.r.l.

Applicazioni web centrati sui dati (Data-centric web applications)

Finalità delle Reti di calcolatori. Le Reti Informatiche. Una definizione di Rete di calcolatori. Hardware e Software nelle Reti

Programmazione dei socket con TCP #2

Esempio 1: stampa locale di file remoto

Reti di Calcolatori. Il software

Esercitazione [7] Client/Server con Socket

URI. Introduzione. Pag. 1

Reti diverse: la soluzione nativa

Reti di Calcolatori. Il Livello delle Applicazioni

Laboratorio di Sistemi Operativi Cognome Nome Mat.

Corso di Laurea in Ingegneria Informatica. Corso di Reti di Calcolatori I

Sicurezza nelle applicazioni multimediali: lezione 9, firewall. I firewall

Internet. Internet. Internet Servizi e Protocolli applicativi. Internet. Organizzazione distribuita

Hardware delle reti LAN

SISTEMI OPERATIVI DISTRIBUITI

12.5 UDP (User Datagram Protocol)

Corso di Sistemi di Elaborazione delle informazioni. Reti di calcolatori 2 a lezione a.a. 2009/2010 Francesco Fontanella

Reti di Telecomunicazione Lezione 7

Firewall e NAT A.A. 2005/2006. Walter Cerroni. Protezione di host: personal firewall

MyFRITZ!, Dynamic DNS e Accesso Remoto

I/O su Socket TCP: read()

Networking. Mauro Migliardi Ph. D.

Manuale per la configurazione di AziendaSoft in rete

Transcript:

Cenni di programmazione distribuita in C++ Mauro Piccolo piccolo@di.unito.it

Socket Nei sistemi operativi moderni i servizi disponibili in rete si basano principalmente sul modello client/server. Tale architettura consente ai sistemi di condividere risorse e cooperare per il raggiungimento di un obiettivo. Per quanto riguarda la programmazione di sistema, esiste l interfaccia delle socket che fornisce un astrazione user-friendly dei meccanismi di base perimplementare programmi client/server. Una socket ( presa, spinotto ) `e un estremit`a di comunicazione tra processi. Una socket in uso `e solitamente legata (bound) ad un indirizzo. La natura dell indirizzo dipende dal dominio di comunicazione del socket. Processi comunicanti nello stesso dominio usano lo stesso formato di indirizzi. Una socket comunica in un solo dominio. I domini implementati sono descritti in <sys/socket.h>. I principali sono il dominio UNIX (AF_UNIX) il dominio Internet (AF_INET, AF_INET6) il dominio Novell (AF_IPX) il dominio AppleTalk (AF_APPLETALK)

Tipi di socket Esistono due modi principali per comunicare in rete: il connection oriented model; il connectionless oriented model. In corrispondenza ai due paradigmi di comunicazione precedenti abbiamo i seguenti tipi di socket: Stream socket forniscono stream di dati affidabili, duplex, ordinati. Nel dominio Internet sono supportati dal protocollo TCP. Socket a datagrammi trasferiscono messaggi di dimensione variabile, preservando i confini ma senza garantire ordine o arrivo dei pacchetti. Supportate nel dominio Internet dal protocollo UDP.

Il dominio Internet: Indirizzi IP Un indirizzo IP (Internet Protocol) e' costituito da quattro decimali interi (con valori da 0 a 255) separati da punti e consente di individuare univocamente la posizione di una sottorete e di un host all interno di quest ultima. Per utilizzare gli indirizzi IP in programmi C, bisogna prima convertirli nel tipo apposito in_addr_t tramite la seguente system call: Esempio Nel file header <netinet/in.h> `e definita la costante simbolica INADDR_ANY che consente di legare una socket alla macchina corrente, senza conoscerne l indirizzo di rete.

Il dominio internet: porte Oltre a conoscere l indirizzo IP dell host a cui connettersi, bisogna disporre dell informazione sufficiente per collegarsi al processo server corretto. Per questo motivo esistono i numeri di porta (port number) che permettono di associare un servizio ad un ben determinato numero. Quindi le connessioni avvengono sempre specificando un indirizzo IP ed un numero di porta. I numeri da 0 a 1023 sono riservati per i servizi standard (e.g., FTP, HTTP ecc.), mentre i numeri da 1024 a 65535 sono disponibili per i processi utente.

Strutture dati per le socket Per memorizzare l indirizzo ed il numero di porta nel file header <sys/socket.h> sono definite le seguenti strutture standard: Per indicare una socket generica Per indicare una socket nel dominio AF_UNIX Per indicare una socket nel dominio AF_INET dove in_addr rappresenta un indirizzo IP

Chiamate di sistema per le socket Per comunicare attraverso la rete, due processi devono dapprima definire i rispettivi transport end point tramite la seguente chiamata di sistema: dove domain indica il dominio della socket (e.g., AF_INET); type indica il se verr`a usato il paradigma connection oriented (SOCK_STREAM) oppure quello connectionless (SOCK_DGRAM); protocol specifica il protocollo da utilizzare: se impostato a 0, viene scelto automaticamente il protocollo pi`u adatto in base ai primi due parametri. Lega l indirizzo dell host ad un socket identifier (solitamente sockfd e' il valore restituito dalla system call socket).

Chiamate di sistema per le socket Il server si mette in ascolto per mezzo della seguente system call: dove queue_size indica la dimensione della coda di client in attesa delle connessioni. Il client si connette con una connect al server in corrispondenza della socket indicata dalla struttura address: Il server accetta una connessione tramite la chiamata di sistema accept: Accettando una richiesta di connessione, viene creata una nuova socket (il cui descrittore `e il valore di ritorno di accept) che verra' usata per comunicare con il client.

Chiamate di sistema per le socket Una volta stabilita la connessione fra client e server, si possono usare le system call send e recv per trasmettere e ricevere dati attraverso le socket: dove sockfd e' l'identificatore della socket buffer sono i dati letti/scritti sotto forma di array (void* e' un tipo puntatore generico che va CASTATO al tipo corretto!!) length e' la lunghezza del dato che il processo e' in grado di gestire flags e' un parametro di controllo (solitamente si passa il valore 0) La call recv restituisce la dimensione dei dati ricevuti Al termine dell'interazione, il socket viene chiuso con close(sockfd)

Esempio Come esempio di applicazione connection oriented si vuole realizzare un maiuscolatore, i.e., un server che riceve delle stringhe di testo dai client, restituendole a questi ultimi dopo aver convertito in maiuscolo le lettere.

upperserver.cpp (1)

upperserver.cpp (2)

upperserver.cpp (3)

upperserver.cpp (4)

Test del server Prima di tutto compiliamo ed eseguiamo il server Usiamo telnet per simulare un client

upperclient.cpp (1)

upperclient.cpp (2)

Problema: Solo un client alla volta puo' connettersi a questo server!!

Socket non bloccanti Le primitive accept() e recv() sono di default bloccanti Occorre una primitiva per rendere le primitive accept() e recv() non bloccanti Occorre mantenere una tabella delle connessioni mantenuta con i client Occorre una primitiva che monitori le connessioni e risvegli il server quando qualcosa accade

Nuove primitive ioctl() Serve per impostare una socket non bloccante select() Permette al processo di aspettare un dato evento e fa risvegliare il processo quando questo evento accade Puo' ritornare 0 se scatta il timeout -1 se la chiamata fallisce (per un errore di sistema) n > 0 indica che n descrittori sono pronti ad essere processati In questo caso dobbiamo aggiornare la tabella dei descrittori struct fd_set, FD_ZERO(), FD_SET(), FD_ISSET() Sevono per gestire la tabella dei descrittori Le chiamate accept() e recv() saranno completate quando viene ritornato il valore EWOULDBLOCK

Socket non bloccanti

upperserver_select.cpp

upperserver_select.cpp

upperserver_select.cpp

upperserver_select.cpp

Upperserver_select.cpp

upperserver_select.cpp

upperserver_select.cpp