Swappa : Uni / La Mail De La Muerte
Creative Commons License

Torna alla pagina di Sistemi Anticoncezionali delle Reti e dei Damiani


 :: La Mail De La Muerte ::

Scopo

Per ottenere delucidazioni su alcuni esercizi dei temi d'esame, dobbiamo intasare il mail server del buon Damiani e di tutti i suoi pseudo-assistenti con le nostre domande. A qualcuno dovranno pur rispondere?! (in modo sensato, possibilmente)

Indirizzi: damiani@dti.unimi.it - ceravolo@dti.unimi.it - FRATI E COLOMBO???

Di seguito alcuni esercizi su cui abbiamo deciso che esigiamo spiegazioni. Chi volesse aggiungerne altri, FA BENE.

Esercizi da copiare nella mail

Esercizio 1 del 11-11-2005

Scrivete lo pseudocodice e le chiamate alla socket library necessarie per realizzare un semplice WWW client con i seguenti requisiti:

1. Dalla linea di comando, leggete (1) la URL che si vuol leggere sul server e (2) il server port number. Create il socket e collegatelo alla porta specificata (e.g., HTTP porta 80) [suggerimento: usate le chiamate getservbyname, gethostbyname, socket, connect].
2. Inviate la richiesta al WWW server usando il messaggio GET del protocollo http. Specificate esplicitamente la richiesta.
3. Leggete i dati dalla connessione HTTP e salvateli su un file temporaneo creato nella vostra WWW cache (e.g., /tmp/yourloginname)sul computer locale
4. Lanciate il processo di un viewer per mostrare a video il ile (suggerimento: usate [fork/exec]. Spiegate almeno due tecniche che potreste usare per decidere il viewer da lanciare a seconda del contenuto del file (suggerimento:usate il campo ContentType di http)

SOLUZIONE

//suppongo che il nome del mio host sia il primo argomento passato da linea di comando 
//e che il numero di porta sia il secondo
nome = argv[1];
porta = argv[2];

//creo il socket "sockid"
int sockid = socket (PF_INET, SOCK_STREAM, 0);

//costruisco la struct sockaddr_in , che chiamo "destinazione"
destinazione.sin_famyly = AF_INET;
destinazione.sin_port = porta; // numero di porta passato come argomento 
destinazione.sin_addr = gethostbyname(nome); // nome dell’host
//DOMANDA: E' GIUSTO FARE COSI'???

//faccio la connect
if(status = connect (sockid, destinazione, NULL) < 0) {
   print(“Errore”);
   exit(-1);
}

//definisco una string "richiesta" per inviare al server il metodo GET
string richiesta = ”GET” + nome + “HTTP/1.1 \n” + “connection: close”; // molto pseudo

//invio la richiesta
send(sockid, richiesta, strlen(richiesta), 0);

//definisco una string "risposta" per ricevere l'HTTP response dal server
string risposta;

//invoco una receive ed immagazzino tutto nella variabile "risposta"
recv (sockid, risposta, strlen(risposta), 0);

//chiudo il socket controllando che vada a buon fine
close(sockid);

//controllo che la prima riga della variabile "risposta" sia "HTTP/1.1 200 OK"
//primaRiga() è una funzione che estrae la prima riga della stringa passata come parametro
if(primaRiga(risposta) != “http/1.1 200 OK”) { 
   print(“errore”);
   exit(-1);
}

//salvo la stringa "risposta" in un file temporaneo nella cartella /tmp/yourloginname
//DOMANDA: DEVO SPIEGARE COME SI IMPLEMENTA LA CREAZIONE DEL FILE? SE SI', COME??

//utilizzando un algoritmo di string-matching cerco nel file la 
//sequenza di caratteri "Content-type "
//da qui in poi copio i caratteri in una variabile stringa "cont" fino ai caratteri "\n"
string cont = copiaCaratteri(fileTemporaneo);

//utilizzo uno switch per scrivere in una stringa "comando" il nome del viewer da aprire
//a seconda del valore contenuto in "cont"
switch (cont) {
   case "text/html":
   comando = "Mozilla 5.0";
   break;
   case ”image/*”:
   comando = "Gimp";
   break;
   case ”audio/*”:
   comando = "Windows media player";
   break;
   default:
   comando = "Notepad";
   break;
}

//aggiungo a "comando" il percorso e il nome del file
comando = comando + “/temp/temporaneo.temp”;

//eseguo
exec(comando);

return(0);

Esercizio 1 del 12-05-2007

Siete stati incaricati di scrivere usando i socket un server a cui possono collegarsi dei citofoni. I citofoni sono collegati al server tramite Ethernet 10Mbps. Il programma server riceve sulla porta 8888 richieste di connessione dai citofoni. Ogni citofono apre due connessioni: una di controllo e l’altra su cui passano I pacchetti dati contenenti la voce campionata. Il server conclude la connessione che trasporta la conversazione quando riceve sulla connessione di controllo un pacchetto contenente la stgringa STOP . Fornite lo schema e lo pseudocodice delle principali chiamate socket necessarie per il corretto funzionamento del programma. Gestite correttamente il problema della possible simultaneità delle richieste di connessione.

SOLUZIONE

SCHEMA A BLOCCHI

PSEUDOCODICE: ...

Esercizio 1 del 20-04-2006

Una rete comprende i router A,B,C,D,E,F,G. Il router C ha appena ricevuto i seguenti messaggi:
(da A: (B, 2), (E, 6))
(da B: (A, 3), (C, 5), (F, 5))
(da D: (C, 3), (F, 6))
(da E: (A, 5), (C, 4), (F, 7))
(da F: (B, 2), (D, 7), (E, 3), (G, 1))
Al router C risultano il costo verso B a 3, verso D a 6 e verso E a 1. Calcolate la tabella di instradamento da C verso gli altri router.

DUBBI


Torna alla pagina di Sistemi Anticoncezionali delle Reti e dei Damiani

(Printable View of http://www.swappa.it/wiki/Uni/LaMailDeLaMuerte)