Prova in itinere 1 - Esempio A

Documenti analoghi
Prova in itinere 5 Maggio 2016

Esame completo - 25 Luglio 2016

Esame completo - 25 Luglio 2016

Esame completo 13 Febbraio 2018

! line con 0 password POLIMI login line vty 0 4 password DEIB login! end. PC> telnet Trying User Access Verification

Esempi di programmi client/server in Python

Prova in itinere 4 Maggio 2016

Prova in itinere 5 Maggio 2016

Esame Completo - 26 Luglio 2017

Prova in itinere 4 Maggio Tempo complessivo a disposizione per lo svolgimento: 2h Usare lo spazio dopo ogni Esercizio/Quesito per la risposta.

Compito. Fondamenti di Internet e Reti Proff. A. Capone, M. Cesana, I. Filippini. Prova in itinere 2 Maggio Cognome Nome Matricola

Prova in itinere 2 Maggio Tempo complessivo a disposizione per lo svolgimento: 2h Usare lo spazio dopo ogni Esercizio/Quesito per la risposta.

Laboratorio. Fa0/ /24. Fa0/ /24. Fa0/ /24. Fa0/ H1 H2 H3

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

Applicazioni di rete

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

Prova in itinere Esempio d esame 1

Esame Completo - 27 Giugno 2018

Esame Completo - 12 Settembre 2017

Esame Completo - 11 Luglio 2017

Esame Completo - 27 Giugno 2018

Prova in itinere Esempio d esame 1

Esame Completo - 11 Luglio 2017

Applicazioni di rete. Applicazioni di rete

Prova in itinere Esempio d esame 1

Prova in itinere 4 Maggio 2016

Prova in itinere 2 Maggio Tempo complessivo a disposizione per lo svolgimento: 2h Usare lo spazio dopo ogni Esercizio/Quesito per la risposta.

Programmare. Definire una sequenza di istruzioni che specificano come effettuare una elaborazione

Reti di calcolatori Tecnologie Web Prova in itinere 2 16 giugno 2010

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

L uso di Socket UDP. TCP vs. UDP UDP

Programmare. Definire una sequenza di istruzioni che specificano come effettuare una elaborazione

I.I.S. G.B. PENTASUGLIA MATERA ISTITUTO TECNICO SETTORE TECNOLOGICO LICEO SCIENTIFICO SCIENZE APPLICATE. Classe: 5Ci

Esercitazione [7] Client/Server con Socket

Programmazione in Rete

Esercitazione [6] Client/Server con Socket

Multithreading. Multithreading/2

Programmare con le Socket TCP

Parte II: Reti di calcolatori Lezione 11 (35)

Programmare con le Socket

Reti di Calcolatori:

Multithreading/2. Più richieste servite simultaneamente > 1 thread per ogni connessione client (+ 1 thread per accettare nuove richieste).

Controllo Winsock di Visual Basic

PROVA FINALE Ingegneria del software

Architettura di Reti

Livello di trasporto:

Esercitazioni di Fondamenti di Informatica - Lez /12/2018

Prova di laboratorio di reti di calcolatori

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

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

Modello client-server

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

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

RETI DI CALCOLATORI Home Work ritardi e livello applicativo

Laboratorio di Reti, Corsi A e B. Text-Twist. Progetto di Fine Corso A.A. 2016/17

Architettura di Reti

Livello trasporto. Servizi del livello trasporto

Laboratorio di Python

Scrittura dei programmi applicativi di rete

API Socket di Berkeley

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

Corso di Reti di Calcolatori T

Cenni di programmazione distribuita in C++ Mauro Piccolo

C UDP in Windows p53 - variante 1

Laboratorio di Python

Socket e PHP - matrix86 tuxmealux [_dot_] net - SOCKET E PHP

Lezione n.7 LPR- Informatica Applicata

Interazione (TCP) Client-Server con le socket

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

Esercitazione. Formato di compitini e compiti: domande ed esercizi "closed book" G. Ferrari - Reti di calcolatori.

Programmazione in Python per la bioinformatica

Laboratorio di Python

Corso di Reti di Calcolatori L-A

Numero NaviDimensione Nave

Laboratorio di Programmazione in Rete

Reti di Calcolatori:

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

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

L interfaccia socket

Laboratorio di Sistemi Applicazioni distribuite Java

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

Simple Social: implementazione di una

Parte II: Reti di calcolatori Lezione 12

Principi, Modelli e Applicazioni per Sistemi Distribuiti M

Esercizio Trasferimento File e Multicast

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

Simulazione esame Laboratorio di Sistemi Operativi Cognome Nome Mat.

La connessione ai database MySQL tramite script PHP versione 5.5

Parte II: Reti di calcolatori Lezione 12 (36)

LABORATORIO di Reti di Calcolatori

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRVWUHDP

Lezione n.10 LPR. RMI CallBacks

RETI DI CALCOLATORI Home Work ritardi e livello applicativo

Interazione (TCP) Client-Server con le socket

Spesso sono definite anche le seguenti operazioni:

Transcript:

Laboratorio (6 punti) Prova in itinere 1 - Esempio A Q1 Si consideri i seguenti codici Python per client e server. Il codice contiene un errore. Quale? Come lo si può correggere modificando il server? Client Name = 'ilmioserver.gratis' Port = 15001 Socket = socket(af_inet, SOCK_STREAM) Socket.connect((Name, Port)) for count in range(1,11): Socket.send('Ho una domanda') risposta = Socket.recv(1024) print 'From Server:', risposta Socket.send('.') Socket.close() Server sport = 15001 ssocket = socket(af_inet, SOCK_STREAM) ssocket.bind(('', sport)) ssocket.listen(1) csocket, clientaddress = ssocket.accept() domanda = csocket.recv(1024) if domanda == 'Ho una domanda': risposta = 'Non ho risposte' csocket.send(risposta) csocket.close() Il client invia per dieci volte la domanda ma il server chiude la connessione dopo aver inviato la prima risposta. Possibile modifica: sport = 15001 ssocket = socket(af_inet, SOCK_STREAM) ssocket.bind(('', sport)) ssocket.listen(1) csocket, clientaddress = ssocket.accept() domanda = csocket.recv(1024) if domanda == 'Ho una domanda': risposta = 'Non ho risposte' else: break csocket.send(risposta) csocket.close()

Q2 Si consideri il server in python scritto sotto. Vengono aperti in parallelo una dopo l altra 4 connessioni da client verso il server. Come vengono gestiti e cosa vedono i quattro client assumendo che ciascuno di essi cerchi di inviare prima una stringa xxx e poi, attendendo 10 s, una stringa.? sport = 15001 ssocket = socket(af_inet, SOCK_STREAM) ssocket.bind(('', sport)) ssocket.listen(2) client = 1 csocket, clientaddress = ssocket.accept() domanda = csocket.recv(1024) if domanda == '.': break risposta = '' for count in (0,client): risposta = risposta + domanda + ' ' csocket.send(risposta) cliente = client + 1 csocket.close() Il primo client viene servito subito e riceve una risposta uguale alla stringa inviata xxx e poi la connessione viene chiusa. Il secondo cliente viene servito dopo il primo e riceve come risposta due volte la stringa xxx xxx e poi la connessione viene chiusa. Il terzo cliente viene servito dopo il secondo e riceve come risposta tre volte la stringa xxx xxx xxx e poi la connessione viene chiusa. La connessione del quarto client viene rifiutata.

Laboratorio (6 punti) Prova in itinere 1 - Esempio B Q1 Si vuole scrivere un'applicazione client/server UDP per il calcolo dei quadrati. Il client chiede all'utente di inserire un numero, il server risponde con il quadrato del numero e infine il client stampa la risposta. (Hint! Utilizzare le funzioni int() e str(): int() converte una stringa ricevuta in un numero intero per effettuare operazioni aritmetiche, str() converte un intero in una stringa da trasmettere). Si completi il codice del server UDP client servername = 'localhost' clientsocket = socket(af_inet, SOCK_DGRAM) message = raw_input( Inserisci un numero ) clientsocket.sendto(message, (servername, serverport)) reply, serveraddress = clientsocket.recvfrom(2048) print reply clientsocket.close() UDP server serversocket = socket(af_inet, SOCK_DGRAM) serversocket.bind(('', serverport)) print "The server is ready to receive"...da COMPLETARE Possibile risposta while 1: message, clientaddress = serversocket.recvfrom(2048) print "Datagram from: ", clientaddress modifiedmessage = str(int(message)*int(message)) serversocket.sendto(modifiedmessage, clientaddress)

Q2 Data la seguente coppia di script si indichi: a) quale è il client e quale il server b) cosa fa l applicazione implementata Script A servername = 'localhost' clientsocket = socket(af_inet, SOCK_STREAM) clientsocket.connect((servername, serverport)) clientsocket.send( Ho vinto? ) reply = clientsocket.recv(1024) print 'From Server:', reply clientsocket.close() Script B serversocket = socket(af_inet, SOCK_STREAM) serversocket.bind(('', serverport)) serversocket.listen(1) print 'The server is ready to receive' client_num = 0 connectionsocket, clientaddress = serversocket.accept() client_num = client_num + 1 print "Connection from: ", clientaddress sentence = connectionsocket.recv(1024) if client_num == 1337: connectionsocket.send( Hai vinto! ) client_num = 0 else: connectionsocket.send( Ritenta! :( ) connectionsocket.close() a) Lo script A implementa il client, lo script B implementa il server b) Il client invia al server la stringa 'Ho vinto?', il server restituisce 'Hai vinto!' a un visitatore ogni 1337, altrimenti restituisce 'Ritenta! :('.

Laboratorio (6 punti) Prova in itinere 1 - Esempio C Q1 Il codice sottoriportato rappresenta una versione semplificata del videogioco Pokèmon GO. Periodicamente l applicazione dell utente (client) invia le proprie coordinate GPS al server, che risponde con l elenco dei Pokèmon presenti nelle vicinanze. Il diagramma in figura mostra il protocollo applicativo, in 3 fasi, tra Client e Server. Client Server FASE 1: Client invia al server le proprie coordinate GPS FASE 2: Il Server comunica al client il numero di Pokèmon nelle vicinanze FASE 3: Il Client richiede iterativamente al Server il nome dei Pokèmon nelle vicinanze Q1) Completare il codice mancante nel Server e nel Client per implementare la fase 3 del protocollo. Q2) Quanti utenti si possono accodare nel Server in attesa di essere serviti? La coda è di 5 utenti Q3) Che protocollo di trasporto è utilizzato? Perché la comunicazione tra server e client richiede tale protocollo? E utilizzato TCP. La modalità connection-oriented consente di mantenere memoria dello stato della connessione e inviare la lista corretta all utente che ha aperto la connessione. Inoltre, TCP garantisce la consegna dei messaggi

Script client servername = 'localhost' clsock = socket(af_inet, SOCK_STREAM) clsock.connect((servername, serverport)) # Invia coordinate GPS al server (latitudine,longitudine) = (5,10) clsock.send(str(latitudine)) message = clsock.recv(2) if message == 'OK': clsock.send(str(longitudin e)) # Legge dal server il numero di Pokemon nelle vicinanze da richiedere poi al server numero_pokemon = int( clsock.recv(100) ) lista_pokemon = [] # Richiede, uno alla volta, la lista dei pokemon al server for i in range(numero_pokemon): clsock.send('go') pokemon = clsock.recv(100) lista_pokemon.append( pokemon ) print lista_pokemon clsock.close() Script server servsock = socket(af_inet, SOCK_STREAM) servsock.bind(('', serverport)) servsock.listen(5) print 'Server Pokemon GO pronto!' clsock, claddr= servsock.accept() print "Connection form: ", claddr # Riceve dal client le coordinate GPS lat = int( clsock.recv(100) ) clsock.send("ok") long = int( clsock.recv(100) ) # Definisce la lista dei Pokemon lista_pkmn = ["Pikachu","Charmander"] # e ne invia la lunghezza clsock.send(str(len(lista_ pokemon))) for pokemon in lista_pkmn: message = clsock.recv(2) if message == 'GO': clsock.send(pokemon) clsock.close()