Esercitazione [6] Client/Server con Socket



Похожие документы
Esercitazione [7] Client/Server con Socket

Cenni di programmazione distribuita in C++ Mauro Piccolo

Esercitazione [5] Input/Output su Socket

Esercitazione [8] Pipe e FIFO

Socket TCP. prima parte

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

DATAGRAM SOCKET. Angelastro Sergio Diomede Antonio Viterbo Tommaso

Reti (già Reti di Calcolatori )

I Socket. Laboratorio Software M. Grotto R. Farina

Una semplice applicazione client/server 1

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

Creare una applicazione Winsock di base

Interazione (TCP) Client-Server con le socket

Esercizio 2. Client e server comunicano attraverso socket TCP

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

HTTP adaptation layer per generico protocollo di scambio dati

COMUNICAZIONE TRA PROCESSI REMOTI IN UNIX

Paradigma client-server

rsystem Maximiliano Marchesi

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

IPC Inter Process Communication

Telematica II 12. Esercitazione/Laboratorio 4

Socket TCP. seconda parte

Introduzione alle applicazioni di rete

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

Programmazione dei socket con TCP #2

Socket & RMI Ingegneria del Software - San Pietro

I/O su Socket TCP: read()

INTERNET e RETI di CALCOLATORI A.A. 2011/2012 Capitolo 4 DHCP Dynamic Host Configuration Protocol Fausto Marcantoni fausto.marcantoni@unicam.

Socket per TCP: Fondamenti

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

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

Laboratorio di Programmazione in Rete

Reti di Telecomunicazione Lezione 8

Altri tipi di connessione

appunti delle lezioni Architetture client/server: applicazioni client

Gestione degli indirizzi

Controllo Winsock di Visual Basic

Reti di Telecomunicazione Lezione 7

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

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

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

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

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

L uso di Socket UDP. Usiamo le API Winsock incluse in <Winsock.h> A.A. 2005/06. Dott.ssa Valeria Carofiglio

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

Inizializzazione degli Host. BOOTP e DHCP

Gestione degli indirizzi

L interfaccia socket

Transmission Control Protocol

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

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

PIANO DI LAVORO A.S. 2015/16

Networking. Mauro Migliardi Ph. D.

Interazione (TCP) Client-Server con le socket

Sistemi Operativi: Programmazione di Sistema

Lo scenario: la definizione di Internet

P2-11: BOOTP e DHCP (Capitolo 23)

Esempio 1: stampa locale di file remoto

Транскрипт:

Esercitazione [6] Client/Server con Socket Leonardo Aniello - aniello@dis.uniroma1.it Daniele Cono D'Elia - delia@dis.uniroma1.it Sistemi di Calcolo - Secondo modulo (SC2) Programmazione dei Sistemi di Calcolo Multi-Nodo Corso di Laurea in Ingegneria Informatica e Automatica A.A. 2014-2015

Sommario Soluzione esercizio su TimeServer Obiettivi dell esercitazione Server socket Client socket Esercizio: EchoServer

Esercizio su TimeServer Scenario o Il server in ascolto su una porta nota o Il client si connette ed invia il messaggio «TIME» o Se il server riceve il messaggio atteso, risponde con ora e data correnti, altrimenti con un messaggio d errore Sorgenti: server.c e client.c Esercizio: completare le parti relative all invio/ricezione su socket Soluzione o Sia per il client che per il server, bisogna verificare che il valore di ritorno delle chiamate send/recv non sia negativo o Se è negativo ed errno corrisponde ad un interrupt, la chiamata va ripetuta

Obiettivi Esercitazione [6] Imparare ad impostare un applicazione client/server con o Server single-thread Come mettersi in ascolto su una porta nota? Come accettare una connessione da client? o Client Come connettersi ad un server in ascolto? o Semplice protocollo basato su messaggi testuali

Server Socket Come mettersi in ascolto su una porta nota? o Creazione socket - funzione socket() o Binding della socket su un indirizzo locale - funzione bind() o Infine mettersi in ascolto - funzione listen() Come accettare una connessione da client? o Attesa di una connessione - funzione accept() Una volta accettata una connessione, si ha disposizione un descrittore di socket da usare per scambiare messaggi (chiamate send()/recv()) o Una volta terminato lo scambio di messaggi, la connessione col client va chiusa - funzione close()

Strutture dati per le socket struct in_addr: rappresenta un indirizzo IP a 32 bit struct sockaddr_in: info di una socket, le principali sono: o Famiglia (sin_family) Per i nostri scopi, AF_INET: per il protocollo IPv4 Ne esistono altre, es: AF_UNIX, AF_BLUETOOTH o Indirizzo IP (sin_addr.s_addr), per i nostri scopi: Lato server, INADDR_ANY: in ascolto su tutte le interfacce Lato client, specifica l indirizzo IP del server o Numero porta (sin_port)

Funzione socket() int socket(int family, int type, int protocol); Crea una socket, ossia un endpoint di comunicazione Argomenti o family: per i nostri scopi, AF_INET (vedi struttura dati struct sockaddr_in) o type: per i nostri scopi, SOCK_STREAM (protocollo TCP) Ne esistono altre, es: SOCK_DGRAM (protocollo UDP) o protocol: per i nostri scopi, 0 Valore di ritorno o In caso di successo, il descrittore della socket o In caso di errore, -1

Funzione bind() int bind(int fd, const struct sockaddr *addr, socklen_t len); Assegna un indirizzo ad una socket Argomenti o fd: descrittore della socket (ritornato da socket()) o addr: puntatore ad una struttura dati che specifica l indirizzo Per i nostri scopi: la struttura struct sockaddr_in va castata a struct sockaddr o len: dimensione della struttura dati puntata da addr Valore di ritorno o In caso di successo, 0 o In caso di errore, -1

Funzione listen() int listen(int sockfd, int backlog); Marca la socket come passiva, ossia che può essere usata per accettare connessioni tramite la chiamata accept() Argomenti o sockfd: descrittore della socket (ritornato da socket()) o backlog: lunghezza massima della coda per le connessioni Se una connessione arriva quando la coda è piena, la connessione viene rifiutata Valore di ritorno o In caso di successo, 0 o In caso di errore, -1

Funzione accept() int accept(int fd,struct sockaddr *addr,socklen_t *len); Accetta una connessione su una socket in ascolto o È una chiamata bloccante: rimane in attesa di connessioni Argomenti o fd: descrittore della socket (ritornato da socket()) o addr: puntatore ad una struttura dati struct sockaddr che verrà riempita con le info della socket del client o len: puntatore ad un intero che verrà settato con la dimensione della struttura dati addr Valore di ritorno o In caso di successo, un descrittore per comunicare col client o In caso di errore, -1

Funzione close() int close(int fd); Nel caso fd sia un descrittore di socket, chiude la socket stessa o Successive chiamate read() dall altro capo ritorneranno 0 Argomenti o fd: descrittore della socket (ritornato da socket()) Valore di ritorno o In caso di successo, 0 o In caso di errore, -1

Client Socket Come connettersi ad un server in ascolto? o Creazione socket - funzione socket() o Connessione al server - funzione connect() o Una volta terminato lo scambio di messaggi, la connessione col client va chiusa - funzione close()

Funzione connect() int connect(int fd,const struct sockaddr *addr,socklen_t l); Tenta una connessione su una socket in ascolto Argomenti o fd: descrittore della socket (ritornato da socket()) o addr: puntatore ad una struttura dati struct sockaddr che descrive la socket alla quale connettersi (quella del server) o l: dimensione della struttura dati puntata da addr Valore di ritorno o In caso di successo, 0 o In caso di errore, -1

Protocollo con messaggi testuali Implementazione un protocollo client-server basato su messaggi di testo o Il server è in ascolto su una porta nota o Il client si connette al server o Inizia uno scambio di messaggi di testo secondo un pattern definito (protocollo) o Protocollo di base Il client invia una richiesta al server Il server riceve la richiesta, la elabora, produce una risposta Il server invia la risposta al client

Esercizio proposto: EchoServer Server single-thread in ascolto su una porta nota Il client si connette al server ed itera su queste operazioni o L utente inserisce da terminale un messaggio o Il client invia questo messaggio al server o Il server risponde con lo stesso messaggio ricevuto o Se il messaggio inviato dal client è «QUIT», termina Sorgenti: client.c e server.c Esercizio o Completare le parti mancanti, relative all invio/ricezione di messaggi via socket o Per l esecuzione, è necessario lanciare client e server su terminali diversi