Torna alla pagina di Sistemi per l'elaborazione delle informazioni
:: Temi d'esame di Sistemi - Data non pervenuta ::
Scrivete lo pseudocodice includendo chiamate alla socket library necessarie per un programma che ripetta i seguenti requisiti:
SOLUZIONE
//Per distinguere se è server o client devo vedere se ci sono parametri sulla // linea di comando. //argc è la dimensione dela stringa, il numero di parametri passati (è la // dimensione dell'argv) if(argc == 1) //server sockid = socket(PF_INET, SOCK_STREAM, 0); //faccio il controllo if(sockid == -1) exit(con vergogna); //creo la struttura sockaddr_in sockaddr_in addr { addr.sin_family = PF_INET; addr.sin_port = 66666; addr.sin_addr = localhost; } //faccio la bind int status = bind(sockid, &addr, lenght(addr)); //faccio un controllo sulla bind if(status==-1) exit(con stile); //faccio la listen, 10 è il numero di elementi in coda listen(sockid, 10); //inizio il ciclo infinito, andrebbe bene anche un while(1) for(;;) { sockaddr indirizzoclient; //indirizzoclient è vuoto, lo riempie la accept, e conterrà //l'indirizzo del client che mi fa la richiesta int chi = accept(sockid, &indirizzoclient, lenght(indirizzoclient)); //creo buffer perché la ''rcv'' legge e scrive su buffer char buffer[1000]; //1000 è la dimensione di buffer recv(sockid, &buffer, 1000, 0); if(buffer == "HELLO") { printf("HELLO \n"); printf("%s \n,", chi.sin_port); printf("%s \n", chi.sin_addr); } close(chi); } //fine server e for else if(argc == 2) { //inizio client //argc è la dimensione dela stringa, il numero di parametri passati (è la // dimensione dell'argv) //metto argv[1] perché la porta arriva da linea di comando int porta = argv[1]; sockid = socket(PF_INET, sock_stream, 0); sockaddr_in addr { addr.sin_family = PF_INET; addr.sin_port = porta; addr.sin_addr = serveraddr; } int status = connect(sockid, &addr, lenght(addr)); //faccio il controllo solito sullo status //invio HELLO con la send //6 è la lunghezza del messaggio send(sockid, "HELLO", 6, 0); close(chi); }
Considerate un'applicazione di file transfer che:
1. trasmette dati a tasso costante (ad esempio: il mittente genera una PDU di n bit ogni k millisecondi).
2. resta in esecuzione per parecchio tempo.
Dovete scegliere se utilizzare TCP o UDP per questa applicazione. Fornite la vostra scelta e motivate la risposta.
SOLUZIONE
Uso TCP perché:
c:/> telnet www.dti.unimi.it 80 (invio) GET /
SOLUZIONE
Il protocollo è HTTP e restituisce la pagina principale, senza nient'altro, senza header nè niente e la connessione viene chiusa subito dopo.
Torna alla pagina di Sistemi per l'elaborazione delle informazioni