|
Wiki
UniCrema
Materie per semestre
Materie per anno
Materie per laurea
Help
|
|
Uni.LaMailDeLaMuerte History
Hide minor edits - Show changes to output
Added lines 10-11:
Indirizzi: damiani@dti.unimi.it - ceravolo@dti.unimi.it - FRATI E COLOMBO???
Changed line 15 from:
!!!!Esercizio 1 del 11-11-2005
to:
!!!Esercizio 1 del 11-11-2005
Changed line 100 from:
!!!!Esercizio 1 del 12-05-2007
to:
!!!Esercizio 1 del 12-05-2007
Changed line 116 from:
!!!!Esercizio 1 del 20-04-2006
to:
!!!Esercizio 1 del 20-04-2006
Added lines 114-129:
!!!!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''' * le distanze tra router adiacenti valgono tutte 1, o possono avere pesi diversi? * nelle informazioni passate nelle varie righe "da A: (B, 2) ...", i router indicati tra parentesi presumo siano le destinazioni. Devo quindi desumere che non mi vengono passate informazioni sui next hop? * se per arrivare in un router destinazione devo passare per un next hop, è giusto sommare le distanze? (in classe veniva aggiunto sempre +1 alla distanza col next hop, ma in questo caso otterrei valori incoerenti) * del router G non so nulla?
Added lines 98-113:
!!!!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'' Attach:es1-SED10.jpg
''PSEUDOCODICE'': ...
Changed lines 16-18 from:
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
to:
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\\
Changed lines 96-97 from:
to:
Added lines 1-99:
(:title La Mail De La Muerte:) [[Torna alla pagina di Sistemi Anticoncezionali delle Reti e dei Damiani->Sistemi]] ----
%titolo%''':: 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)
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);
---- [[Torna alla pagina di Sistemi Anticoncezionali delle Reti e dei Damiani->Sistemi]]
|
|