Una semplice applicazione client/server 1



Documenti analoghi
Esercitazione [6] Client/Server con Socket

INTERNET DOMAIN SOCKETS (Cap.59)

Cenni di programmazione distribuita in C++ Mauro Piccolo

Reti (già Reti di Calcolatori )

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

Socket TCP. prima parte

Interazione (TCP) Client-Server con le socket

Elementi di programmazione con interfaccia Socket

DATAGRAM SOCKET. Angelastro Sergio Diomede Antonio Viterbo Tommaso

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

Laboratorio di Sistemi Operativi Cognome Nome Mat.

Creare una applicazione Winsock di base

IPC Inter Process Communication

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ&

Esercitazione [7] Client/Server con Socket

Programmazione socket. Queste slide sono distribuite con licenza Creative Commons Attribuzione-Non commerciale-condividi allo stesso modo 2.

Sistemi di Elaborazione. Introduzione alla Programmazione distribuita

I/O su Socket TCP: read()

Program m azione di Sistem a 6

COMUNICAZIONE TRA PROCESSI REMOTI IN UNIX

HTTP adaptation layer per generico protocollo di scambio dati

Laboratorio di. Reti Informatiche. Corso di Laurea Triennale in Ingegneria Informatica A.A. 2016/2017. Ing. Niccolò Iardella

Introduzione alle applicazioni di rete

Socket TCP. seconda parte

rsystem Maximiliano Marchesi

Programmazione di applicazioni di rete

Paradigma client-server

LABORATORIO di Reti di Calcolatori

Interazione con il DNS Conversioni di Nomi ed Indirizzi

Corso di Reti di Calcolatori T

appunti delle lezioni Architetture client/server: applicazioni client

Laboratorio di Programmazione in rete

Interazione (TCP) Client-Server con le socket

Esercizio 2. Client e server comunicano attraverso socket TCP

Esempio 1: stampa locale di file remoto

Esercitazione Laboratorio di Sistemi Operativi Cognome Nome Mat.

Programmazione dei socket con TCP #2

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

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

Socket per TCP: Fondamenti

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

Scrittura dei programmi applicativi di rete

Guida all' uso dei sockets nella programmazione in C

Laboratorio di Reti di Calcolatori

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

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

Esempi di Client e Server

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

Transmission Control Protocol

Sicurezza delle reti. Monga. Ricognizione. Scanning Breve ripasso socket Network mapping Port Scanning NMAP. Le tecniche di scanning

L interfaccia socket

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

Manuale per la configurazione di AziendaSoft in rete

Sistemi di Elaborazione. Introduzione alla Programmazione distribuita

Interprocess Communications - II. Franco Maria Nardini

programmazione distribuita Introduzione Introduzione alla programmazione distribuita

Programmazione di Rete

Impostazione dell'indirizzo IP del dispositivo di autenticazione di Xerox Secure Access Unified ID System Carta bianca

COSTER. Import/Export su SWC701. SwcImportExport

Servizio on-line di Analisi e Refertazione Elettrocardiografica

Zeroshell: VPN Lan-to-Lan. Il sistema operativo multifunzionale. creato da

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

Configurazione del servizio Dynamic DNS. Questa procedura ti guiderà durante i 4 passi necessari alla messa in funzione del servizio.

Socket Programming. Socket Programming. Università di Palermo

Introduzione ai socket

Dal protocollo IP ai livelli superiori

RETI DI CALCOLATORI. Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI. Facoltà di Ingegneria Università degli Studi di Udine

Una prima applicazione in C per l utilizzo delle socket

Internetworking with TCP/IP (Douglas E. Comer) Vol. I and Vol III.

Veneto Lavoro via Ca' Marcello 67/b, Venezia-Mestre tel.: 041/

Reti di Telecomunicazione Lezione 6

MANUALE DI INSTALLAZIONE DI CISCO VPN CLIENT

Inter-process communication: socket

SPRING SQ COMUNICAZIONE OPERAZIONI IVA NON INFERIORI A 3000 EURO PER L ANNO 2011

Creazione Account PEC puntozeri su Outlook Express

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

MC-link Lan+ Connessione e configurazione del router PRESTIGE 100

SOMMARIO COSA SERVE... 2 PRIMA DI INIZIARE... 2 COME PROCEDERE LATO SERVER... 3 COME PROCEDERE LATO CLIENT... 3

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

Nuovo server E-Shop: Guida alla installazione di Microsoft SQL Server

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

Controllo Winsock di Visual Basic

Una socket è un punto estremo di un canale di comunicazione accessibile mediante un file descriptor. Alcuni tipi predefiniti di socket

2010 Ing. Punzenberger COPA-DATA Srl. Tutti i diritti riservati.

TOOLS DI MONITORAGGIO DI RETE Total Network Monitor

Reti Informatiche. Quarta esercitazione

unsigned long inet_addr(cp) char *cp;

Registratori di Cassa

Inizializzazione degli Host. BOOTP e DHCP

Che differenza c è tra una richiesta XML ed una domanda XML? (pag. 4)

LABORATORIO di Reti di Calcolatori

Laboratorio di Programmazione in Rete

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

Vlan Relazione di Sistemi e Reti Cenni teorici

SC per Inter Process Comminication. Comunicazione fra macchine diverse: socket

GENIUSPRO. Installazione del software Installazione del driver Configurazione del software Registrazione Attivazione

Transcript:

Una semplice applicazione client/server 1 Il nostro obiettivo In questa parte del corso implementeremo un applicazione client/server che usa i socket Internet disponibili nei sistemi Unix/Linux. Nello specifico useremo i SOCK STREAM, che garantiscono una trasmissione dei pacchetti sequenziale e affidabile (grazie all uso del protocollo TCP). Il sistema sarà molto semplice: il server si metterà in ascolto su una porta locale, attendendo che i client comunichino con lui; ogni volta che un client lo contatterà gli invierà un messaggio e chiuderà la comunicazione ovviamente il server dovrà essere in grado di servire richieste multiple. il client contatterà il server e stamperà a video il messaggio ricevuto. Apposite stampe a video ci informeranno dello stato dei due processi e delle erazioni che stanno avvenendo. Nelle prossime sezioni andremo a vedere le strutture dati e le system call che il sistema operativo ci mette a disposizione. Attenzione: le dispense non discutono i prototipi delle funzioni, ma sono solo un vademecum. Strutture dati Un socket è un descrittore di file, ovvero un. Strutture dati più complicate sono invece necessarie per il set-up della comunicazione: addrinfo prepara le informazioni che serviranno per la definizione dei socket: struct addrinfo { ai_flags; ai_family; ai_socktype; ai_protocol; size_t ai_addrlen; struct sockaddr *ai_addr; char *ai_canonname; struct addrinfo *ai_next; 1 Dispense per il corso di Sistemi di Elaborazione Informazione I, Scuola Interfacoltà di Scienze Strategiche, Università di Torino Docente: Alessia Visconti, http://di.unito.it/~visconti Le seguenti dispense sono distribuite sotto la Creative Common license CC BY-NC-SA. È consentito distribuire, modificare, creare opere derivate dall originale a patto che che venga riconosciuta la paternità dell opera all autore, non siano utilizzate per scopi commerciali, e che alla nuova opera venga attribuite una licenza identica o compatibile con l originale. 1

Alcune strutture dati ignorano la versione di IP, come sockaddr storage: struct sockaddr_storage { sa_family_t ss_family; char ss_pad1[_ss_pad1size]; 64_t ss_align; char ss_pad2[_ss_pad2size]; e come sockaddr: struct sockaddr { unsigned short char sa_family; sa_data[14]; Tuttavia, di quest ultima esistono delle strutture dati specializzate per lavorare con IPv4: struct sockaddr_in { short sin_family; unsigned short sin_port; struct in_addr sin_addr; unsigned char sin_zero[8]; struct in_addr { u32_t s_addr; e con IPv6: struct sockaddr_in6 { u_16_t sin6_family; u_16_t sin6_port; u_32_t sin6_flowinfo; struct in6_addr sin6_addr; u_32_t sin6_scope_id; struct in6_addr { unsigned char s6_addr[16]; sockaddr è compatibile con entrambe, quindi: struct sockaddr *sa; struct sockaddr_in sa_ipv4 = (struct sockaddr_in *)sa; struct sockaddr_in6 sa_ipv6 = (struct sockaddr_in6 *)sa; sono assegnamenti validi. 2

System Calls Abbiamo chiuso la sezione precedente parlando si indirizzi IPv4 e IPv6. Ma come si converte un indirizzo codificato in una struttura sockaddr nella famigliare notazione puntata? Con questa funzione: #include <arpa/inet.h> const char *inet_ntop( af, const void *src, char *dst, socklen_t size); le lunghezze degli indirizzi IPv4 e IPv6 sono contenuti in due macro: INET ADDRSTRLEN e INET6 ADDRSTRLEN, rispettivamente (in <netinet/in.h>). Per esempio per convertire un indirizzo IPv4 contenuto in una struttura sockaddr in sa e stamparlo a video dovremmo eseguire il seguente codice: char ipv4[inet_addrstrlen]; inet_ntop(af_inet, &(sa.sin_addr), ipv4, INET_ADDRSTRLEN); prf("ipv4: %s\n", ipv4); Concentriamoci ora sulle sulle system call che ci permetteranno di implementare la nostra applicazione client/server tramite stream socket. Il primo passo che dobbiamo fare è la compilazione delle strutture dati che ci servirà per la connessione al socket, ovvero le struct addrinfo. Per farlo sarà necessario inserire solo alcune informazioni salienti e la system call getaddrinfo si occuperà di fare il lavoro. La system call freeaddrinfo() invece libererà la memoria quando la struttura non sarà più necessaria. #include <netdb.h> getaddrinfo(const char *node, const char *service, const struct addrinfo *hs, struct addrinfo **res); void freeaddrinfo(struct addrinfo *res); Per esempio se volessimo connetterci sulla porta 4242 del nostro host locale, tramite TCP. lasciando che sia il sistema a scegliere tra IPv4 e IPv6, quello che dovremmo scrivere sarà: struct addrinfo hs, *res; char *node = NULL; char *service = "4242"; memset(&hs, 0, sizeof hs); hs.ai_family = AF_UNSPEC; hs.ai_socktype = SOCK_STREAM; hs.ai_flags = AI_PASSIVE; status = getaddrinfo(node, service, &hs, &res); freeaddrinfo(res); 3

Dopo aver caricato le informazioni necessarie non ci resta che ottenere il descrittore associato al socket: socket( domain, type, protocol); dove i parametri necessari alla funzione sono già codificati nella struct addrinfo. Nel caso di un server devo anche associare il socket a una porta su cui il server stesso sarà in ascolto e cui accetterà le connessioni entranti, attività svolte dalle seguenti system call: bind( sockfd, struct sockaddr *my_addr, addrlen); listen( sockfd, backlog); accept( sockfd, struct sockaddr *addr, socklen_t *addrlen); Anche in questo caso tutte le informazioni sono già codificati nella struct addrinfo. Ma come comunicare su una porta associata ad un dato indirizzo? Con la seguente system call: connect( sockfd, struct sockaddr *serv_addr, addrlen); Ora che la comunicazione è stata stabilita servono due system call per inviare e ricevere messaggi: send( sockfd, const void *msg, len, flags); recv( sockfd, void *buf, len, flags); Attenzione: queste system call permettono la comunicazione solo su stream socket. L ultima system call che ci serve è quella che ci permette di chiudere la comunicazione: #include <unistd.h> close( fd); Ora abbiamo tutte le informazioni che ci servono per procedere con l implementazione! Letture consigliate Il materiale presentato in queste dispense segue (abbastanza) fedelmente il libro (in inglese) di Brian Beej Jorgenses Hall [B1]. Di questo manuale esiste anche una traduzione in italiano [B2], che però non è aggiornata. Ricordate sempre che il comando man è il modo migliore per avere informazioni puntuali sulle strutture dati e sulle system call utilizzate. 4

Bibliografia [B1] Brian Beej Jorgenses Hall, Beej s Guide to Netwroking Programming, Version 3.0.15, July 2012, http://beej.us/guide/bgnet/ [B2] Brian Beej Jorgenses Hall, Guida di Beej alla Programmazione di Rete, Version 2.4.5, Agosto 2007, http://linguaggioc.altervista.org/guidabeej_it.php 5