Guida all' uso dei sockets nella programmazione in C

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Guida all' uso dei sockets nella programmazione in C"

Transcript

1 Guida all' uso dei sockets nella programmazione in C ( pseudo-traduzione personalizzata di "Beej's Guide to Network Programming" ) (Prima parte) INTRODUZIONE Finalmente ho trovato una guida chiara e semplice sui sockets in C. L' ho cercata molto: ho sguazzato per la rete alla ricerca di testi più o meno specifici e alla fine ho scelto questa. Il testo in questione è la "Beej' s Guide to Network Programming" ( che è un riassunto dei librri più dettagliati di Ritchard Stevens sui sockets sotto UNIX ). Non è sicuramente una guida completa ai sockets, ma è un buon inizio per tutti. Perchè ho tradotto questo testo? Sicuramente per me stesso visto che è di facile consultazione ( nel caso mi dimenticassi qualche cosa (e succede spessissimo ))... e poi anche per condividerla con voi, dato che penso possa essere uno spunto per tutti. La traduzione non è letterale: in alcuni punti ho cancellato frasi inutili per cercare di arrivare al succo del discorso e altri punti li ho completamente stravolti aggiungendo spiegazioni personali che ho ritenuto essere più chiare... in ogni caso la guida non è ancora completa, perchè ho intenzione di scrivere un tutorial che può essere considerato l'appendice di questo... Il progetto sarebbe quello di collezionare dei programmi trovati in rete o scritti da me e commentarli dettagliatamente... Comunque vedremo più avanti che cosa verrà fuori. Ritornando a questo tutorial, devo avvisarvi che non troverete l' argomento "Client- Server"... Giuro che l'avrete tra un po'... in fondo questa è solo la prima parte. La guida si rivolge a tutti quelii che hanno anche una piccola base di C. L' unica cosa importante è che abbiate bene in mente come funziona una "struttura" e come "manipolare" i suoi elementi attraverso i puntatori. Avendo queste basi, potrete seguire senza problemi ciò che è descritto in questo testo. La programmazione viene fatta sotto Linux... Per adesso vi auguro una buona lettura e se volete fare qualche critica o chiedere qualche cosa potete scrivere a psyco@hackeralliance.net

2 CIao... P.S.: nel caso abbiate trovato la guida di Beej già tradotta in italiano... vi prego di non dirmelo P5yc[0] COS' E' UN SOCKET? Sicuramente avrete sentito parlare di sockets e vi interesserebbe conoscere qualcosa in più. I sockets sono un "modo" per comunicare con altri programmi, usando dei files "descrittori" standard di UNIX ( ricordiamo che in questo testo faremo riferimento solo a sistemi Unix-Like ). Alcuni sostengono che qualsiasi cosa, in UNIX, può essere considerato un file. Quello che si vuol dire è il fatto che quando un programma sotto UNIX fa un qualsialsi lavoro di I/O, lo fa leggendo o scrivendo su un file detto "descrittore" ( file descriptor ). Questo file può essere una connessione via internet o un terminale o un file su disco o una pipe o qualsiasi altra cosa: insomma qualsiasi cosa è considerato un file! Quindi, quando vogliamo "comunicare" con altri programmi, anche attraverso la rete, lo facciamo attraverso un "file descriptor". "Dove si trova questo file descriptor?" è forse l' ultima domanda da porsi in questo momento, ma la risposta è: "Bisogna fare una chiamata alla routine di sistema... questa chiamata è la socket().

3 Questo restituisce il socket descriptor e noi comunicheremo, attraverso di esso, usando le "socket calls" send() e recv() ( digitare i comandi "man send" e "man recv" per ulteriori informazioni ). Potreste dire:"hey, ma, se si tratta di un file descrittore, perchè, per mille balene, non posso usare read() e write() per comunicare attraverso i sockets? la risposta secca sarebbe: "Puoi farlo"... quella dettagliata è :"Puoi farlo, ma send() e recv() offrono un maggiore controllo sulle vostre trasmissioni di dati. Ci sono molti tipi di sockets, ma noi ci occuperemo dei DARPA INTERNET ADDRESS ( Internet sockets ). 2-- DUE TIPI DI INTERNET SOCKETS Studieremo solo due dei molti tipi di sockets esistenti, anche se ci sono i RAW SOCKETS che sono anch' essi molto importanti e andrebbero studiati. I due tipi di sockets di cui ci occuperemo sono: gli STREAM SOCKETS e i DATAGRAM SOCKETS che, nel seguito, chiameremo, rispettivamente, SOCK_STREAM e SOCK_DGRAM. I "datagram sockets" sono spesso chiamati "connectionless sockets" ( letteralmente: sockets senza connessione ) ( anche se, comunque, è possibile connetterli... vedremo in seguito ). Attraverso gli "stream sockets", i dati arrivano in ordine e senza errori. Ad esempio, se dobbiamo trasmettere un "1,2", con gli stream sockets saremo sicuri del fatto che arriveranno a destinazione nel giusto ordine e liberi da errore... cioè arriveranno nell' ordine "1,2". Da quali applicazioni sono utilizzati gli "Stream Sockets"? Avete mai sentito parlare di Telnet? Telnet li usa: tutti i caratteri che vengono digitati, devono poter arrivare nello stesso ordine.

4 Un altro esempio può essere il Browser: questo utilizza, infatti, il protocollo HTTP che fa uso degli stream sockets. Come fanno gli stream sockets a raggiungere questo alto livello di qualità? Usano un protocollo chiamato "Trasmission Control Protocol" conosciuto anche come TCP ( per i dettagli sul protocollo TCP, fare riferimento alla RFC-793 ). TCP fa si che i vostri dati arrivino sequenzialmente e senza errori. Inoltre, sicuramente, avrete sentito parlare di TCP/IP. "IP" sta per "Internet Protocol" ( vedi RFC-791 ). IP comunica per primo con l' Internet routing e non è, in generale, responsabile dell' integrità dei dati. Bene. E per quanto riguardano i "Datagram Sockets"? Ci sono alcune cose da dire: se viene mandato un datagram, possono verificarsi due casi: 1) il dato arriva 2) il dato non arriva Se il dato arriva, i dati sono senza errori, ma non è detto che arrivino in ordine. I Datagram sockets usano l' "IP" per il routing, ma non usano "TCP": usano un altro protocollo chiamato UDP ( "User Datagram Protocol" (RFC-768)). Perchè sono detti "connectionless"? Perchè non serve mantenere una connessione aperta come si fa con gli Stream sockets. Basta costruire un pacchetto con un IP header ( che abbia le informazioni riguardanti la destinazione ), e lo si "spedisce". Sono solitamente utilizzati i trasferimenti di informazioni "packet by packet". Un' applicazione può essere il tftp. Abbiamo detto abbastanza. Aggiungiamo solo che ogni pacchetto inviato con protocolllo UDP deve ricevere un pacchetto "di avvenuta ricezione" chiamato "ACK packet". Questo è importante quando andiamo ad utilizzare i SOCK_DGRAM, perchè rischiamo di mandare un pacchetto UDP senza essere sicuri se, effettivamente, il pacchetto sia arrivato. 3-- NETWORKING

5 Vediamo come funzionano, brevemente, le reti e, in particolare, vediamo qualche esempio sui SOCK_DGRAM. ( ETHERNET ( IP ( UDP ( TFTP ( DATA ) ) ) ) ) SCHEMA INCAPSULAMENTO DEI DATI l' incapsulamento dei dati è di fondamentale importanza. Funziona in questo modo ( fare riferimento allo schema sopra riportato ): Viene creato un pacchetto ( DATA ), viene messo nell' header del primo protocollo ( nel nostro schema di esempio il primo protocollo è TFTP ). Successivamente, tutto questo viene incapsulato nel protocollo UDP ( ad esempio ) e il tutto, ancora, viene messo in IP. E, infine, in ETHERNET ( o un altro protocollo hardware ). Quando un altro computer riceve il pacchetto descritto sopra, l' hardware lo "spoglia" dell' involucro più esterno ( l' ethernet header ); Il kernel preleva gli header dell' IP e UDP; TFTP preleva l' header di TFTP e, infine, il dato. Modello di rete a livelli: questo modello descrive la funzionalità di un sistema di rete, che ha molti vantaggi rispetto ad altri. Per esempio, con questo modello, si possono scrivere programmi in cui non andremo a preoccuparci di come il dato verrà trasmesso, in quanto ci saranno altri programmi ( ai livelli più bassi ) che se ne occuperanno. L' hardware e la topologia del network è trasparente al programmatore. Ecco i livelli: --Application --Presentation --Session --Transport --Network --Data link --Physical

6 Il livello "Physical" è quello hardware ( seriale, Ethernet ). Il livello "Application" è il livello in cui l' utente interagisce con il network. Questo descritto è un modello generale. Vediamo un modello un po' più specifico in Unix: I livelli, in questo caso sono: 1 Application ( telnet, ftp,... ) 2 Host - to - Host transparent layer ( TCP, UDP ) 3 Internet Layer ( IP and routing ) 4 Network Access Layer ( Ethernet, ACK, ecc. ) 4-- STRUTTURE E MANIPOLAZIONE DEI DATI Con questo capitolo, iniziamo la parte pratica: la programmazione. Nelle pagine successive verranno considerati vari tipi di dati usati dall' interfaccia sockets. Il tipo più semplice è int. Da ricordare: ci sono due tipi di ordinamento di bytes: il primo prevede la presenza di un byte più significativo ( chiamato anche "ottetto" ) e uno meno significativo. Questo tipo di ordinamento dei bytes è chiamato "Network Byte Order" ( detto anche Big-Endian Byte Order ). Ci sono macchine che utilizzano, in alternativa, l' Host Byte Order. Nel seguito, quando diremo che "un qualcosa" deve essere messo in Netwok Byte Order, vorrà dire che dovrete chiamare una funzione ( come htons(), che vedremo dopo ) per passare da "Host byte Order" in "Network Byte Order"... se non diremo nulla, il valore sarà lasciato in Host Byte Order.

7 La prima struttura -- struct sockaddr Questa struttura contiene informazioni sui "socket addresses" per molti tipi di sockets: struct sockaddr { unsigned short sa_family; \\ indirizzo della famiglia AF_xxx char sa_data[14]; \\ 14 bytes di protocoll address }; -- sa_family può avere valori differenti, ma in questo documento utilizzeremo solo AF_INET. -- sa_data contiene un indirizzo di destinazione e un numero di porta per il socket Per comunicare con la "struct sockaddr", i programmatori hanno creato una struttura parallela, più chiara: struct sockaddr_in { short int sin_family; \\ "in" sta per internet \\ address family unsigned short int sin_port; \\ port number struct in_addr sin_addr; \\ Internet address unsigned char sin_zero[8]; \\ Stessa grandezza della struttura }; Questa struttura permette di avere un accesso più facilitato agli elementi della struttura stessa. Importante è il fatto che sin_zero ( che indica la grandezza della struttura ) deve avere i suoi elementi ( quelli dell' array ) posti a zero quando utilizziamo la funzione memset.

8 Altro fatto importante è che un puntatore ad una "struct sockaddr_in" può essere modificato in "struct sockaddr" ( attraverso un casting ) e vice versa. Da notare che: -- sin_family corrisponde a sa_family della struct sockaddr e può, quindi, essere posto a "AF_INET". -- sin_port e sin_addr devono essere in NETWORK BYTE ORDER. 5-- CONVERSIONE da HOST BYTE ORDER in NETWORK BYTE ORDER e vice-versa Ci sono due tipi che possono essere convertiti: short ( 2 bytes ) e long ( 4 bytes ) ( anche quando sono utilizzati con "unsigned"). Se vogliamo, ad esempio, convertire uno short da "Host Byte Order" a "Network Byte Order". Si utilizza la funzione htons() ( h-to-n-s = hostto-network-short ). Tutte le conversioni effettuabili sono le seguenti: htons() htonl() ntohs() ntohl() In Unix, si deve tener ben presente che: prima di mandare i bytes di dati sul network, essi devono essere convertiti in Network Byte Order.

9 Da ricordare: sin_family deve essere in Host Byte Order e può rimanere in Host Byte Order anche se non è "mandata in rete". 6-- "IP ADDRESSES": COME COMUNICARE CON LORO Fortunatamente, ci sono molte funzioni che permettono di manipolare gli indirizzi IP. Immaginiamo di avere una struttura "struct sockaddr_in ina" e abbiamo l' indirizzo che vogliamo posizionare nella struttura. La funzione da usare è inet_addr (), che converte l' indirizzo IP, formato da numeri e punti, in una unsigned long. L' assegnazione può essere scritta così: ina.sin_addr.s_addr = inet_addr(" "); E da dove viene fuori s_addr? Dal fatto che la struttura in_addr è definita in questo modo: } struct in_addr { unsigned long s_addr; NOTA: inet_addr() restituisce già l'indirizzo in Network Byte Order, quindi non c'è bisogno di utilizzare htonl() per convertirlo. Il codice scritto [ ina.sin_addr.s_addr = inet_addr(" ") ], non è molto robusto per il fatto che non viene effettuato nessun tipo di controllo degli errori. Quindi è utile, quando andremo ad utilizzare inet_addr(), assicurarsi anche di fare un così detto "error checking". A questo proposito è importante ricordarsi che, in caso di errore, inet_addr() restituisce -1.

10 C'è un' interfaccia più "pulita" di inet_addr() ed è inet_aton() ( a-to-n = ascii to network ). Ecco un esempio e gli headers che utilizza: #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> int inet_aton( const char *cp, struct in_addr *inp ); Vediamo, a questo punto, un esempio su come "riempire i campi della struttura struct sockaddr_in": struct sockaddr_in my_addr; my_addr.sin_family = AF_INET; \\definisce myaddr come struttura di tipo sockaddr_in \\Host Byte Order my_addr.sin_port = htons(myport); \\short Network Byte Order inet_aton(" ", &(my_addr.sin_addr)); \\l' abbiamo appena visto memset (&(my_addr.sin_zero), '\0\, 8); \\pone a zero il resto della struttura inet_aton(), al contrario di ogni altra funzione socket, restituisce "non-zero" in caso sia vera, zero se falsa. E l' indirizzo è ripassato a inp. Comunque, non tutte le piattaforme implementano inet_aton(). Quindi, sebbene sia preferibile il suo utilizzo, in questa guida sarà utilizzato inet_addr(). Adesso siamo riusciti a convertire stringhe di IP nella loro rappresentazione binaria. Nel caso volessimo fare il contrario, cioè se avessimo struct in_addr e volessimo trasformarlo in una rappresentazione di "numeri e punti", dovremmo usare la funzione inet_ntoa() ( n- to-a = network to ascii ), in questo modo:

11 printf("%s", inet_ntoa(ina.sin_addr)); questo stampa l'indirizzo IP. NOTA: "inet_ntoa" prende una "struct in_addr" come argomento, non una long!! Da notare anche che la funzione restituisce un puntatore ad un char. Questo punta ad un array di caratteri attraverso inet_ntoa() così che, ad ogni chiamata di inet_ntoa(), questo scriverà l'ultimo IP richiesto. Ad esempio: char *a1, *a2; a1 = inet_ntoa( ina1.sin_addr ); \\facciamo finta che questo sia l'ip a2 = inet_ntoa( ina2.sin_addr ); \\facciamo finta che questo sia l' IP printf("address1: %s\n", a1); printf("address2: %s\n", a2); l'output sarà: address1: address2: Cioè verrà sovrascritto l' indirizzo precedente. Quindi, se vogliamo evitare che si "perda" l'indirizzo "address1", potremmo usare la funzione strcpy() per scriverlo, magari, in un altro array...

12 7-- CHIAMATE DI SISTEMA Questa Sezione è dedicata alle chiamate di sistema per accedere alla rete. A) Richiamare il file descriptor Il primo passo per permetterci di "comunicare" in rete, è quello di chiamare la funzione socket(). Vediamo subito di che cosa si tratta e che "headers" utilizza: #include <sys/types.h> #include <sys/sockets.h> int socket(int domain, int type, int protocol); Ora cerchiamo di capire nel dettaglio gli argomenti della chiamata socket(): --domain: dovrebbe essere settato a "AF_INET", proprio come la struttura "struct sockaddr_in" --type: dice al kernel che tipo di socket voglio usare: SOCK_STREAM o SOCK_DGRAM ( sono quelli che utilizzeremo in questa mini guida ai sockets ) --protocol: si pone a "0" ( "zero" ) per far si che "socket()" scelga il corretto protocollo basato sull' argomento "type"

13 NOTA: ci sono molti più "types" di quelli che abbiamo elencato. Per avere una lista completa lanciate il comando "man socket" dal vostro terminale preferito :). Inoltre, per utilizzare i protocolli ci sono altri modi ( fate "man getprotobyname" per saperne di più ). Error checking: La chiamata socket() restituisce il "socket descriptor" che utilizzeremo nelle prossime chiamate a sistema o restituisce -1 se ho un errore. B) bind() -- Su che porta mi trovo? Una volta che abbiamo un socket, potremmo associarlo ad una porta della macchina locale. Il numero della porta è usato dal kernel per associare un pacchetto entrante ad un certo processo del socket. Se vogliamo utilizzare solo un connect() ( verrà spiegato più avanti ), allora non ci sarà bisogno di aprire una porta... Scriviamo brevemente come si utilizza bind() e i suoi "headers": #include <sys/types.h> #include <sys/socket.h> int bind (int sockfd, struct sockaddr *my_addr, int addrlen); Come prima, analizziamo gli argomenti di bind: --sockfd: è il socket descriptor restituito da "socket()". --my_addr: è un puntatore alla struttura "struct sockaddr", che contiene informazioni come il nome del nostro indirizzo, la porta e indirizzo IP. --addrlen: può essere settato a sizeof(struct sockaddr).

14 Vediamo un esempio: #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #define MYPORT 3490 main() { int sockfd; struct sockaddr_in my_addr; sockfd = socket( AF_INET, SOCK_STREAM, 0); //aggiungere qualche "error checking" my_addr.sin_family = AF_INET; //Host Byte Order my_addr.sin_port = htons(myport); // short Network Byte Order stuttura my_addr.sin_addr.s_addr = inet_addr(" "); memset(&(my_addr.sin_zero), '\0', 8); // mette a zero il resto della //non dimenticarsi degli "error checking" bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr));

15 Da notare: --my_addr.sin_port è in Network Byte Order --my_addr.sin_addr.s_addr è in Network Byte Order Importante: gli headers, potrebbero cambiare da sistema a sistema. Per essere sicuri del loro corretto utilizzo, visitate le pagine di manuale del vostro sistema *nix e controllate, per ogni funzione che andate ad utilizzare, quali headers ci vogliono... Ad esempio se volete sapere che "header files" utilizza la chamata "socket()", fate "man socket". Un' ultima analisi: alcune volte, può essere necessario far si che l'assegnazione del proprio indirizzo IP e/o della porta, venga fatta automaticamente... per fare ciò, nel listato precedente, avremmo dovuto operare in questo modo: my_addr.sin_port = 0; // sceglie in modo random una porta non utilizzata... my_addr.sin_addr.s_addr = INADDR_ANY; // usa il nostro indirizzo IP Quindi, ponendo my_addr.sin port a 0, facciamo in modo che bind() scelga la porta per noi. E ancora, ponendo my_addr.sin_addr.s_addr a INADDR_ANY, faremo in modo che bind() metta automaticamente l' indirizzo della macchina in cui sta girando il processo... Perchè INADDR_ANY non è stato messo in Network Byte Order? Perchè INADDR_ANY è già di per se uno 0 ( zero )... e zero, anche in forma di bytes, rimane sempre zero. C'è chi dice che INADDR_ANY potrebbe essere un valore diverso da 0 e, dunque, questo codice potrebbe non funzionare. Allora, a scanso di ogni equivoco, possiamo scrivere: my_addr.sin_port = htons(0); my_addr.sin_addr.s_addr = htonl(inaddr_any); Error checking: bind() restituisce -1in caso di errore e errno viene aggiornato al valore di errore.

16 Altra nota importante: tutte le porte sotto la 1024 sono RISERVATE. Potete, invece, utilizzare tutte le porte dalla 1024 alla ( a meno che non siano usate da qualche altro programma ). Alle volte potreste imbattervi in un errore del tipo "Address already in use"... questo significa che, anche se la comunicazione attraverso il socket è conclusa, il socket la sta ancora utilizzando. Il problema si risolve da solo aspettando un po', oppure potreste aggiungere al vostro programma il seguente codice: int yes=-1; // Gli utenti del Solaris usano char yes=-1; == -1){ if(setsockopt(listener, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) perror("setsockopt"); exit(1); } Ultima nota: come abbiamo già detto, se il nostro scopo è solo quello di connetterci ad una macchina remota e non ci interessa che porta andremo ad utilizzare sulla nostra macchina, allora non sarà necessario usare bind(). C) connect() -- Hey, tu!!! Ohh finalmente ci connetteremo a qualche cosa... Facciamo finta di essere un applicazione telnet. Il vostro utente vi comanda di "prelevare" un socket. Allora chiamate la funzione socket(). Dopo, l' utente vi dice di connettervi a " " sulla porta "23". Come dovreste fare? Lo spieghiamo subito con la descrizione di connect e dei sui headers:

17 #include <sys/types.h> #include <sys/socket.h> int connect ( int sockfd, struct sockaddr *serv_addr, int addrlen ); Ecco, in dettaglio, gli argomenti usati da connect(): --sockfd è il socket "descrittore", restituito dalla chiamata socket() --serv_addr è una struct sockaddr contenente la destinazione,la porta e l' indirizzo della macchina remota --addrlen può essere posto a sizeof(struct sockaddr) Esempio: #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #define DEST_IP " " #dedfine DEST_PORT 23 main() { int sockfd; struct sockaddr_in dest_addr; // conterrà l'indirizzo di destinazione sockfd = socket(af_inet, SOCK_STREAM, 0); // fate qualche error checking

18 dest_addr.sin_family = AF_INET; // Host Byte Order dest_addr.sin_port = htons(dest_port); // short, Network Byte Order dest_addr.sin_addr.s_addr = inet_addr(dest_ip); memset(&(dest_addr.sin_zero), '\0', 8); // mette a zero il resto della struttura // fate qualche error checking per connect sockaddr)); connect(sockfd, (struct sockaddr *)&dest_addr, sizeof(struct Error checking: connect() restituisce -1 se ho errore e verrà settata anche errno al valore di errore. D) listen() -- Grazie per aver chiamato 3490 Facciamo finta di voler rimanere in attesa di connessioni da parte di una macchina remota. Il processo si compone di due passi costituiti dalle funzioni: listen() e accept(). D1) listen() La listen() è abbastanza semplice da utilizzare...

19 int listen (int sockfd, int backlog); Gli argomenti in dettaglio sono: --sockfd: è sempre lo stesso "socket file descriptor" ricevuto dalla chiamata a socket(). --backlog: è il numero massimo di connessioni permesse sulla coda entrante. Cosa significa? Le connessioni entranti vengono messe in coda fino a che non vengono accettate con accept(). Backlog, quindi, rappresenta il limite massimo di queste connessioni messe in attesa. Error checking: listen() restituisce -1 in caso di errore e errno viene settato al valore di errore... E' ovvio che, nel caso andassimo ad utilizzare listen(), dovremmo prima specificare quale porta dovremo mettere in "listening" e questo lo faremo con bind() ( visto prima ). In generale avremo questa sequenza: socket() bind() listen() //qui andrà accept che vedremo tra un secondo... D2) accept() accept() è un po' strana. Vediamo subito che cosa succede: qualcuno, da remoto, prova a "connettersi" ( con connect() ) alla vostra macchina, su una

20 porta ( specificata da bind() ) su cui siete in ascolto ( usando listen() )... Le connessioni verranno messe in coda aspettando di essere accettate ( con accept() ). Allora chiameremo la funzione accept() e le "diremo" di prendere la prima connessione. Questo restituirà un nuovo socket file descriptor da usare per una singola connessione. A questo punto, come avrete notato, avremo 2 "socket file descriptor": "l'originale" ( cioè il primo ) è ancora in fase di ascolto sulla nostra porta e "il nuovo" creato è finamente pronto a mandare ( con send()... tra un po' lo vedremo ) e ricevere ( con recv() ). Vediamo la chiamata in dettaglio: #include <sys/sockets.h> int accept( int sockfd, void *addr, int *addrlen); E ora gli argomenti: --sockfd è il file descrittore restituito da listen() --addr sarà un puntatore ad una "struct sockaddr_in" locale. Qui è dove verranno allocate le informazioni relative alla connessione ( host, porta della macchina remota ) --addrlen è l'intero locale variabile che dovrebbe essere settato a sizeof(struct sockaddr_in) prima che il suo indirizzo sia passato ad accept(). Error checking: accept, in caso di errore, restituisce -1 e viene settato, come al solito, anche errno ad errore. Esempio di codice: #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h>

21 #define MYPORT 3490 #define BACKLOG 10 main() { int sockfd, new_fd; struct sockaddr_in my_addr; struct sockaddr_in their_addr; int sin_size; sockfd = socket(af_inet, SOCK_STREAM, 0); my_addr.sin_family = AF_INET; my_addr.sin_port = htons(myport); my_addr.sin_addr.s_addr = INADDR_ANY; // non dimenticate di fare i controlli sugli errori bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)); listen(sockfd, BACKLOG); sin_size = sizeof(struct sockaddr_in); new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size);......

22 ... NOTA: new_fd è usato per mandare ( send() ) e ricevere ( recv() ) chiamate. Se si vuole dare accesso ad un' altra connessione, si può chiudere quella precedente con close(). E) send() e recv() Queste due funzioni vengono utilizzati per comunicare attraverso STREAM_SOCKETS o DGRAM_SOCKETS connessi. Se volessimo usare DATAGRAM SOCKETS non connessi, allora dovremmo usare sendto() e revcfrom() ( vedere paragrafo successivo ). Ecco la chiamata send(): int ( int sockfd, const void *msg, int len, int flags); Ed ecco gli argomenti: --sockfd: è sempre il solito --msg è un puntatore ai dati che vogliamo mandare --len è la lunghezza dei dati, in bytes --flags viene posto a 0 ( per ulteriori chiarimenti vedere "man send" ) Esempio di codice: char *msg = "Eccomi!!"; int len, bytes_sent;

23 len = strlen(msg); bytes_sent = send(sockfd, msg,len, 0); send() restituisce il numero di bytes in uscita ( potrebbero essere minori del numero di bytes che avete deciso di mandare). Se i bytes effettivamente inviati non sono uguali a "len", dovete essere voi a mandare il resto della stringa. La buona notizia sta nel fatto che, se il pacchetto di dati è abbastanza piccolo (meno di 1k ), probabilmente si riuscirà a mandare tutto il pacchetto in una sola volta. Error checking: send() restituisce -1 se c'è errore e errno è posto allo stesso valore dell' errore. La chiamata recv(): int recv( int sockfd, void *buf, int len, unsigned int flags); Come potete vedere recv() è molto simile a send()... Vediamo, comunque, gli argomenti nel dettaglio: --sockfd è il socket descriptor dal quale leggere. --buf è il buffer da cui leggere le informazioni ricevute --len è la lunghezza massima del buffer --flags è posto a zero ( vedere "man recv") Ricapitolando, recv() restituisce il numero di bytes attualmente letto nel buffer oppure il

24 valore -1 se c'è errore. Ma può anche restituire 0: questo significa che la macchina remota ha chiuso la connessione. F) sendto() e recvfrom() L' informazione di cui abbiamo bisogno è l'indirizzo di destinazione. Chiamata sento(): int sendto() ( int sockfd, const void *msg, int len, unsigned int flags, const struct sockaddr *to, int tolen); Come possiamo vedere, ho gli stessi argomenti di send(), più altri 2: --to: puntatore a "struct sockaddr" ( avrete struct sockaddr_in su cui dovrete fare un casting all' ultimo momento ) che contiene l' indirizzo IP e la porta di destinazione. --tolen può essere posto a sizeof(struct sockaddr) Error checking: come send(), sendto() restituisce il numero di bytes mandati ( che può essere minore dei bytes che abbiamo deciso di mandare ) oppure -1 se ho errore. Altrettanto simili sono recv() e recvfrom(). Per recvfrom() ho: int recvfrom( int sockfd, void *buf, int len, unsigned int flags, struct sockaddr *from, int *fromlen );

25 Anche qui ho due argomenti in più rispetto a recv(): --from è un puntatore ad una struct sockaddr locale e sarà "riempito" con l' indirizzo IP e la porta della macchina d' origine. --fromlen è un puntatore ad un "int" locale che dovrebbe essere inizializzato a sizeof (struct sockaddr ). Conterrà la lunghezza dell' indirizzo attualmente messo in from. Error checking: recvfrom() restituisce il numero di bytes ricevuti oppure -1 se errore e errno viene settato al valore dell' errore. Da ricordare: Se connettiamo un DATAGRAM SOCKET, possiamo usare send() e recv() per le transazioni. G) close() e shutdown() Per chiudere una connessione si usa close(), in questo modo: close(sockfd); Per avere un controllo maggiore sulla chiusura di un socket, si può usare shutdown(): int shutdown( int sockfd, int how ); Gli argomenti: --sockfd è il socket che si vuole interrompere --how può essere di tre tipi:

26 -> 0 : la ricezione è disabilitata -> 1 : la trasmissione è disabilitata -> 2 : sia la ricezione che la trasmissione sono disabilitate Error checking: shutdown() restituisce 0 se ha successo, -1 se c'è errore... ( errno viene settato al valore di errore... come sempre!!!) In realtà shutdown(), non chiude un socket, ma cambia il suo utilizzo... per chiudere definitivamente un socket, dovete usare close(). H) getpeername() -- Chi sei? Questa funzione è molto semplice. Ci dice chi è connesso all' altro capo della connessione di tipo STREAM. int getpeername( int sockfd, struct sockaddr *addr, int *addrlen ); Gli argomenti: --sockfd è il solito --addr è un puntatore alla struttura "struct sockaddr" ( o struct sockaddr_in ) e contiene le informazioni sulla macchina remota --addrlen è un puntatore ad interi che dovrebbe essere inizializzato a sizeof(struct sockaddr) Error checking: la funzione restituisce -1 se abbiamo errore.

27 Una volta ricevuto l' indirizzo della macchina remota, si possono usare "inet_ntoa" o "gethostbyaddr" per avere altre informazioni sulla macchina remota. I) gethostname() -- Chi sono? Molto più semplice della funzione precedente... #include <unistd.h> int gethostname(char *hostname, size_t size); Argomenti: --hostname è un puntatore di array di caratteri che conterrà l' hostname al "ritorno" dalla funzione. --size è la lunghezza in bytes dell' array "hostname" L) DNS -- Dimmi "whitehouse.org" e rispondo " " DNS sta per "Domain Name Service" Per avere, ad esempio, l'ip associato ad un host, si usa gethostbyname(): #include <netdb.h> struct hostent *gethostbyname ( const char *name );

28 Come si può vedere, restituisce un puntatore a "struct hostent", la quale ha il seguente layout: struct hostent { char *h_name; char **h_aliases; int h_addrtype; int h_lenght; char **h_addr_list; }; #define h_addr h_addr_list[0] Descrizione degli argomenti: --h_name è il nome ufficiale dell' host --h_aliases è l' array di nomi alternativi dell' host --h_addrtype è il tipo di indirizzo restituito... di solito è AF_INET --h_lenght è la lunghezza dell' indirizzo di bytes --h_addr_list è l'array di indirizzi di rete per l' host. Gli indirizzi degli host sono in Network Byte Order. Error checking: la funzione restituisce un puntatore alla struttura "struct hostent" ( i cui campi sono stati riempiti ) o NULL se ho un errore... Questa volta non è errno ad essere settato, ma h_errno... quindi quando faremo il controllo degli errori, non dovremo usare perror(), ma herror(). Vediamo ora un esempio completo di programma:

29 /*GetIP*/ #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <netdb.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> int main(int argc, char *argv[]) { struct hostent *host; if( argc!= 2 ) { fprintf(stderr, "Usage:./getip <hostname>\n"); exit(1); } if((host=gethostbyname(argv[1])) == NULL) { herror("gethostbyname"); exit(1); } printf("host: %s\n", host->h_name);

30 printf("ip: %s\n", inet_ntoa(*((struct in_addr *)host->h_addr))); } Il programma utilizza le funzioni appena viste per stampare a video l' host remoto e il suo indirizzo IP. FINE PRIMA PARTE

Socket TCP. seconda parte

Socket TCP. seconda parte Socket TCP seconda parte Schema della connessione Computer 1 127.43.18.1 indirizzo I1 indirizzo I2 Computer 2 143.225.5.3 porta 45000 socket porta 5200 socket processo client processo server socket(...)

Dettagli

Socket TCP. prima parte

Socket TCP. prima parte Socket TCP prima parte Cosa cambia: socket int fd = socket(pf_inet, SOCK_STREAM, 0); if (fd

Dettagli

Cenni di programmazione distribuita in C++ Mauro Piccolo piccolo@di.unito.it

Cenni di programmazione distribuita in C++ Mauro Piccolo piccolo@di.unito.it Cenni di programmazione distribuita in C++ Mauro Piccolo piccolo@di.unito.it Socket Nei sistemi operativi moderni i servizi disponibili in rete si basano principalmente sul modello client/server. Tale

Dettagli

I Socket. Laboratorio Software 2008-2009 M. Grotto R. Farina

I Socket. Laboratorio Software 2008-2009 M. Grotto R. Farina M. Grotto R. Farina Sommario 1. Applicazioni Distribuite 2. I Socket Introduzione Interfacce e protocolli Descrizione Stile di comunicazione Namespace e protocollo Include e system call Creazione e chiusura

Dettagli

Esercitazione [6] Client/Server con Socket

Esercitazione [6] Client/Server con Socket 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

Dettagli

Una semplice applicazione client/server 1

Una semplice applicazione client/server 1 Una semplice applicazione client/server 1 Il nostro obiettivo In questa parte del corso implementeremo un applicazione client/server che usa i socket Internet disponibili nei sistemi Unix/Linux. Nello

Dettagli

Programmazione di Rete

Programmazione di Rete Programmazione di Rete Ing. Carlo Nobile Socket slide n 1 Sommario Berkeley's socket Socket UDP: funzioni fondamentali Esempio applicazione: Listener Sender Socket non bloccanti Indirizzo IP e Porta Sicurezza

Dettagli

Reti (già Reti di Calcolatori )

Reti (già Reti di Calcolatori ) Reti (già Reti di Calcolatori ) Cenni di Socket Programming Renato Lo Cigno http://disi.unitn.it/locigno/index.php/teaching-duties/computer-networks Socket API Programmazione dei socket Obiettivo:imparare

Dettagli

Laboratorio di Sistemi Operativi 29-01-2009. Cognome Nome Mat.

Laboratorio di Sistemi Operativi 29-01-2009. Cognome Nome Mat. Il compito è costituito da domande chiuse, domande aperte ed esercizi. Non è consentito l uso di libri, manuali, appunti., etc. Tempo massimo 2 ore. Domande chiuse: ogni domanda corrisponde ad un punteggio

Dettagli

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

Socket. Nei sistemi operativi moderni i servizi disponibili in rete si basano principalmente sul modello client/server. Socket Nei sistemi operativi moderni i servizi disponibili in rete si basano principalmente sul modello client/server. Tale architettura consente ai sistemi di condividere risorse e cooperare per il raggiungimento

Dettagli

Esercitazione Laboratorio di Sistemi Operativi 20-01-2014. Cognome Nome Mat.

Esercitazione Laboratorio di Sistemi Operativi 20-01-2014. Cognome Nome Mat. Il compito è costituito da domande chiuse e domande aperte. Non è consentito l uso di libri, manuali, appunti., etc. Tempo massimo 2 ore. Domande chiuse: ogni domanda corrisponde ad un punteggio di 1 punto

Dettagli

Scrittura dei programmi applicativi di rete

Scrittura dei programmi applicativi di rete Scrittura dei programmi applicativi di rete Contenuti del corso La progettazione delle reti Il routing nelle reti IP Il collegamento agli Internet Service Provider e problematiche di sicurezza Analisi

Dettagli

TECNOLOGIE E PROGETTAZIONE DI SISTEMI INFORMATICI E DI TELECOMUNICAZIONI

TECNOLOGIE E PROGETTAZIONE DI SISTEMI INFORMATICI E DI TELECOMUNICAZIONI TECNOLOGIE E PROGETTAZIONE DI SISTEMI INFORMATICI E DI TELECOMUNICAZIONI Confronto tra ISO-OSI e TCP/IP, con approfondimento di quest ultimo e del livello di trasporto in cui agiscono i SOCKET. TCP/IP

Dettagli

Guida di Beej alla Programmazione di Rete

Guida di Beej alla Programmazione di Rete Guida di Beej alla Programmazione di Rete Usando Socket Internet Brian "Beej Jorgensen" Hall beej@beej.us Versione 2.4.5 5 Agosto 2007 Copyright 2007 Brian "Beej Jorgensen" Hall Traduzione di Fabrizio

Dettagli

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ&

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ& (VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ& 3ULPRHVHUFL]LR6RFNHWVWUHDPFRQULGLUH]LRQH Si progetti un applicazione distribuita Client/Server per una rete di workstation UNIX (BSD oppure System V). In particolare,

Dettagli

COMUNICAZIONE TRA PROCESSI REMOTI IN UNIX

COMUNICAZIONE TRA PROCESSI REMOTI IN UNIX A cura del prof. Gino Tombolini 1 COMUNICAZIONE TRA PROCESSI REMOTI IN UNIX Il sistema UNIX TCP/IP fornisce un meccanismo di comunicazione tra processi residenti su nodi distinti di una rete, compatibili

Dettagli

Guida Tecnica. Come visionare da internet anche dietro un IP dinamico i dvr Brahms.

Guida Tecnica. Come visionare da internet anche dietro un IP dinamico i dvr Brahms. Guida Tecnica Come visionare da internet anche dietro un IP dinamico i dvr Brahms. Lo scopo di questa guida e di spiegare, in maniera semplice ci auguriamo, come connettersi ai DVR Brahms indicati sotto

Dettagli

Interazione (TCP) Client-Server con le socket

Interazione (TCP) Client-Server con le socket Interazione (TCP) Client-Server con le socket D. Gendarmi Interazione TCP Client/Server Server 2. Assegnare un local address alla socket 3. Settare la socket all ascolto 4. Iterativamente: a. Accettare

Dettagli

Reti di Telecomunicazioni Mobile IP Mobile IP Internet Internet Protocol header IPv4 router host indirizzi IP, DNS URL indirizzo di rete

Reti di Telecomunicazioni Mobile IP Mobile IP Internet Internet Protocol header IPv4 router host indirizzi IP, DNS URL indirizzo di rete IP Analizziamo con sufficiente dettaglio il sistema denominato IP, usato per consentire a due computer mobili di spostarsi liberamente in altre reti pur mantenendo lo stesso indirizzo IP. In particolare,

Dettagli

FtpZone Guida all uso

FtpZone Guida all uso FtpZone Guida all uso La presente guida ha l obiettivo di spiegare le modalità di utilizzo del servizio FtpZone fornito da E-Mind Srl. All attivazione del servizio E-Mind fornirà solamente un login e password

Dettagli

I/O su Socket TCP: read()

I/O su Socket TCP: read() I/O su Socket TCP: read() I socket TCP, una volta che la connessione TCP sia stata instaurata, sono accedibili come se fossero dei file, mediante un descrittore di file (un intero) ottenuto tramite una

Dettagli

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

Socket. Nei sistemi operativi moderni i servizi disponibili in rete si basano principalmente sul modello client/server. Socket Nei sistemi operativi moderni i servizi disponibili in rete si basano principalmente sul modello client/server. Tale architettura consente ai sistemi di condividere risorse e cooperare per il raggiungimento

Dettagli

Socket per TCP: Fondamenti

Socket per TCP: Fondamenti Socket per TCP: Fondamenti Network Applications Molte applicazioni di rete sono formate da due programmi distinti (che lavorano su due diversi host) uno detto server ed uno detto client. Il server si mette

Dettagli

L interfaccia socket

L interfaccia socket L interfaccia socket Application Programming Interface: API Socket API Procedure base Altre procedure Ordinamento dei byte Interazione client-server orientata alla connessione Interazione client-server

Dettagli

RETI DI CALCOLATORI. Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI. Facoltà di Ingegneria Università degli Studi di Udine

RETI DI CALCOLATORI. Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI. Facoltà di Ingegneria Università degli Studi di Udine RETI DI CALCOLATORI Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI Facoltà di Ingegneria Università degli Studi di Udine 2003 Pier Luca Montessoro (si veda la nota a pagina 2) 1 Nota di Copyright Questo

Dettagli

HTTP adaptation layer per generico protocollo di scambio dati

HTTP adaptation layer per generico protocollo di scambio dati HTTP adaptation layer per generico protocollo di scambio dati Sandro Cavalieri Foschini 101786 Emanuele Richiardone 101790 Programmazione in Ambienti Distribuiti I - 01FQT prof. Antonio Lioy A.A. 2002-2003

Dettagli

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli CODICE Le fonti in cui si possono trovare tutorial o esempi di progetti utilizzati con Arduino si trovano nel sito ufficiale di Arduino, oppure nei forum di domotica e robotica. Il codice utilizzato per

Dettagli

Innanzitutto, esistono diversi modi per realizzare una rete o più reti messe insieme; vi illustro la mia soluzione :

Innanzitutto, esistono diversi modi per realizzare una rete o più reti messe insieme; vi illustro la mia soluzione : SALVE, Scrivo questo breve testo di delucidazioni a seguito di alcune richieste.. e per permettere a tutti di usare al meglio zeroshell per quanto riguarda i sistemi di video sorveglianza; é mia intenzione

Dettagli

Laboratorio di Programmazione in rete

Laboratorio di Programmazione in rete Laboratorio di rogrammazione in rete Introduzione alla programmazione C di socket A.A. 2005/06 Comunicazione tra computer Come far comunicare più computer su una rete? Una collezione di protocolli: TC/I

Dettagli

Reti di Telecomunicazione Lezione 6

Reti di Telecomunicazione Lezione 6 Reti di Telecomunicazione Lezione 6 Marco Benini Corso di Laurea in Informatica marco.benini@uninsubria.it Lo strato di applicazione protocolli Programma della lezione Applicazioni di rete client - server

Dettagli

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

J+... J+3 J+2 J+1 K+1 K+2 K+3 K+... Setup delle ConnessioniTCP Una connessione TCP viene instaurata con le seguenti fasi, che formano il Three-Way Handshake (perchè formato da almeno 3 pacchetti trasmessi): 1) il server si predispone ad

Dettagli

COME FARE UNA RICHIESTA DI ASSISTENZA ON LINE (AOL)

COME FARE UNA RICHIESTA DI ASSISTENZA ON LINE (AOL) COME FARE UNA RICHIESTA DI ASSISTENZA ON LINE (AOL) Cos è l AOL? Pag. 2 Come inviare una richiesta AOL Pag. 3 La risposta dell assistenza Pag. 5 Come rispondere ad una risposta AOL Pag. 7 Ulteriori nozioni

Dettagli

PROCEDURA INVENTARIO DI MAGAZZINO di FINE ESERCIZIO (dalla versione 3.2.0)

PROCEDURA INVENTARIO DI MAGAZZINO di FINE ESERCIZIO (dalla versione 3.2.0) PROCEDURA INVENTARIO DI MAGAZZINO di FINE ESERCIZIO (dalla versione 3.2.0) (Da effettuare non prima del 01/01/2011) Le istruzioni si basano su un azienda che ha circa 1000 articoli, che utilizza l ultimo

Dettagli

Vlan Relazione di Sistemi e Reti Cenni teorici

Vlan Relazione di Sistemi e Reti Cenni teorici Cosa sono le Vlan? Vlan Relazione di Sistemi e Reti Cenni teorici Le Vlan sono un tipo di rete particolare che permettono di creare tante reti logiche a partire da una singola rete fisica. Questo significa

Dettagli

Innanzitutto andiamo sul sito http://www.dropbox.com/ ed eseguiamo il download del programma cliccando su Download Dropbox.

Innanzitutto andiamo sul sito http://www.dropbox.com/ ed eseguiamo il download del programma cliccando su Download Dropbox. Oggi parlerò di qualcosa che ha a che fare relativamente con la tecnica fotografica, ma che ci può dare una mano nella gestione dei nostri archivi digitali, soprattutto nel rapporto professionale con altre

Dettagli

Esempio 1: stampa locale di file remoto

Esempio 1: stampa locale di file remoto Alcuni esempi di uso di Socket Esempio 1: stampa locale di file remoto Visualizzazione locale del contenuto di un file remoto. Il client deve richiedere la creazione della connessione e successivamente

Dettagli

INTRODUZIONE I CICLI DI BORSA

INTRODUZIONE I CICLI DI BORSA www.previsioniborsa.net 1 lezione METODO CICLICO INTRODUZIONE Questo metodo e praticamente un riassunto in breve di anni di esperienza e di studi sull Analisi Tecnica di borsa con specializzazione in particolare

Dettagli

Creare una applicazione Winsock di base

Creare una applicazione Winsock di base Creare una applicazione Winsock di base Usiamo le API Winsock incluse in Creare un progetto per una Socket Windows (in Dev C++) Selezionare la file New Projects Selezionare Empty Project Salvare

Dettagli

risulta (x) = 1 se x < 0.

risulta (x) = 1 se x < 0. Questo file si pone come obiettivo quello di mostrarvi come lo studio di una funzione reale di una variabile reale, nella cui espressione compare un qualche valore assoluto, possa essere svolto senza necessariamente

Dettagli

Come realizzare i disegni in Autocad partendo da un immagine

Come realizzare i disegni in Autocad partendo da un immagine Come realizzare i disegni in Autocad partendo da un immagine L obbiettivo di questo articolo, è quello di poter avere a disposizione le linee di costruzione in qualsiasi scala, senza dover fare decine

Dettagli

Dal protocollo IP ai livelli superiori

Dal protocollo IP ai livelli superiori Dal protocollo IP ai livelli superiori Prof. Enrico Terrone A. S: 2008/09 Protocollo IP Abbiamo visto che il protocollo IP opera al livello di rete definendo indirizzi a 32 bit detti indirizzi IP che permettono

Dettagli

Internet i vostri figli vi spiano! La PAROLA-CHIAVE: cacao Stralci di laboratorio multimediale

Internet i vostri figli vi spiano! La PAROLA-CHIAVE: cacao Stralci di laboratorio multimediale Internet i vostri figli vi spiano! La PAROLA-CHIAVE: cacao Stralci di laboratorio multimediale Ins: nel laboratorio del Libro avevamo detto che qui, nel laboratorio multimediale, avremmo cercato qualcosa

Dettagli

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

MODELLO CLIENT/SERVER. Gianluca Daino Dipartimento di Ingegneria dell Informazione Università degli Studi di Siena daino@unisi.it MODELLO CLIENT/SERVER Gianluca Daino Dipartimento di Ingegneria dell Informazione Università degli Studi di Siena daino@unisi.it POSSIBILI STRUTTURE DEL SISTEMA INFORMATIVO La struttura di un sistema informativo

Dettagli

Determinare la grandezza della sottorete

Determinare la grandezza della sottorete Determinare la grandezza della sottorete Ogni rete IP possiede due indirizzi non assegnabili direttamente agli host l indirizzo della rete a cui appartiene e l'indirizzo di broadcast. Quando si creano

Dettagli

Scrittura dei programmi applicativi di rete

Scrittura dei programmi applicativi di rete Nota di Copyright RETI DI CALCOLATORI Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI Facoltà di Ingegneria Università degli Studi di Udine Questo insieme di trasparenze (detto nel seguito slide) è protetto

Dettagli

CREARE UNA LIBRERIA IN C

CREARE UNA LIBRERIA IN C CREARE UNA LIBRERIA IN C Prima di cominciare a vedere come fare una libreria, dobbiamo capire di cosa abbiamo bisogno... di un file.h che sarà l'header della libreria (ovvero il file che conterrà i prototipi

Dettagli

rsystem Maximiliano Marchesi maximiliano.marchesi@studenti.unipr.it

rsystem Maximiliano Marchesi maximiliano.marchesi@studenti.unipr.it Maximiliano Marchesi 28 Settembre 2005 Diario delle Revisioni Revisione 1.2 28 Settembre 2005 maximiliano.marchesi@studenti.unipr.it Sommario Introduzione..................................................................................

Dettagli

www.filoweb.it STAMPA UNIONE DI WORD

www.filoweb.it STAMPA UNIONE DI WORD STAMPA UNIONE DI WORD Molte volte abbiamo bisogno di stampare più volte lo stesso documento cambiando solo alcuni dati. Potremmo farlo manualmente e perdere un sacco di tempo, oppure possiamo ricorrere

Dettagli

Introduzione alle applicazioni di rete

Introduzione alle applicazioni di rete Introduzione alle applicazioni di rete Definizioni base Modelli client-server e peer-to-peer Socket API Scelta del tipo di servizio Indirizzamento dei processi Identificazione di un servizio Concorrenza

Dettagli

Dopo aver installato WSFTP.le, alla prima schermata quando lo apriamo vedremo questo.

Dopo aver installato WSFTP.le, alla prima schermata quando lo apriamo vedremo questo. Dopo aver installato WSFTP.le, alla prima schermata quando lo apriamo vedremo questo. clicchiamo su Continue nella finestra successiva, spuntiamo la voce Other e clicchiamo su Next Nella terza schermata

Dettagli

Inizializzazione degli Host. BOOTP e DHCP

Inizializzazione degli Host. BOOTP e DHCP BOOTP e DHCP a.a. 2002/03 Prof. Vincenzo Auletta auletta@dia.unisa.it http://www.dia.unisa.it/~auletta/ Università degli studi di Salerno Laurea e Diploma in Informatica 1 Inizializzazione degli Host Un

Dettagli

Office 2007 Lezione 08

Office 2007 Lezione 08 Word: gli stili veloci e i temi Da questa lezione, iniziamo ad occuparci delle innovazioni che riguardano specificamente Word. Cominceremo parlando di stili e temi. Nella filosofia di questo nuovo Word,

Dettagli

Introduzione alla programmazione in C

Introduzione alla programmazione in C Introduzione alla programmazione in C Testi Consigliati: A. Kelley & I. Pohl C didattica e programmazione B.W. Kernighan & D. M. Ritchie Linguaggio C P. Tosoratti Introduzione all informatica Materiale

Dettagli

DATAGRAM SOCKET. Angelastro Sergio Diomede Antonio Viterbo Tommaso

DATAGRAM SOCKET. Angelastro Sergio Diomede Antonio Viterbo Tommaso DATAGRAM SOCKET Angelastro Sergio Diomede Antonio Viterbo Tommaso Definizione supporta i datagram privo di connessione messaggi inaffidabili di una lunghezza massima prefissata il protocollo UDP supporta

Dettagli

MOCA. Modulo Candidatura. http://www.federscacchi.it/moca. moca@federscacchi.it. [Manuale versione 1.0 marzo 2013]

MOCA. Modulo Candidatura. http://www.federscacchi.it/moca. moca@federscacchi.it. [Manuale versione 1.0 marzo 2013] MOCA Modulo Candidatura http://www.federscacchi.it/moca moca@federscacchi.it [Manuale versione 1.0 marzo 2013] 1/12 MOCA in breve MOCA è una funzionalità del sito web della FSI che permette di inserire

Dettagli

Architettura del. Sintesi dei livelli di rete. Livelli di trasporto e inferiori (Livelli 1-4)

Architettura del. Sintesi dei livelli di rete. Livelli di trasporto e inferiori (Livelli 1-4) Architettura del WWW World Wide Web Sintesi dei livelli di rete Livelli di trasporto e inferiori (Livelli 1-4) - Connessione fisica - Trasmissione dei pacchetti ( IP ) - Affidabilità della comunicazione

Dettagli

Reti di Telecomunicazione Lezione 7

Reti di Telecomunicazione Lezione 7 Reti di Telecomunicazione Lezione 7 Marco Benini Corso di Laurea in Informatica marco.benini@uninsubria.it Il protocollo Programma della lezione file transfer protocol descrizione architetturale descrizione

Dettagli

Collegamento e funzionamento di un normale TNC con il D-RATS http://d-rats.danplanet.com

Collegamento e funzionamento di un normale TNC con il D-RATS http://d-rats.danplanet.com + Collegamento e funzionamento di un normale TNC con il D-RATS http://d-rats.danplanet.com A molti è già capitato di utilizzare il software D-RATS con apparati D-STAR o INTERNET, però, non tutti sanno

Dettagli

Linee Guida all uso dell ESLC Testing Tool per gli studenti (IT)

Linee Guida all uso dell ESLC Testing Tool per gli studenti (IT) Linee Guida all uso dell ESLC Testing Tool per gli studenti (IT) Indice 1 INTRODUZIONE 3 2 COME EFFETTUARE I TEST 3 2.1 Effettuare l accesso 3 2.2 Controllare l audio per il Test di ascolto 5 2.3 Svolgere

Dettagli

Reti di Telecomunicazione Lezione 8

Reti di Telecomunicazione Lezione 8 Reti di Telecomunicazione Lezione 8 Marco Benini Corso di Laurea in Informatica marco.benini@uninsubria.it Livello di trasporto Programma della lezione relazione tra lo strato di trasporto e lo strato

Dettagli

Mac Application Manager 1.3 (SOLO PER TIGER)

Mac Application Manager 1.3 (SOLO PER TIGER) Mac Application Manager 1.3 (SOLO PER TIGER) MacApplicationManager ha lo scopo di raccogliere in maniera centralizzata le informazioni piu salienti dei nostri Mac in rete e di associare a ciascun Mac i

Dettagli

Modulo 4 Il pannello amministrativo dell'hosting e il database per Wordpress

Modulo 4 Il pannello amministrativo dell'hosting e il database per Wordpress Copyright Andrea Giavara wppratico.com Modulo 4 Il pannello amministrativo dell'hosting e il database per Wordpress 1. Il pannello amministrativo 2. I dati importanti 3. Creare il database - Cpanel - Plesk

Dettagli

Guida all uso di Java Diagrammi ER

Guida all uso di Java Diagrammi ER Guida all uso di Java Diagrammi ER Ver. 1.1 Alessandro Ballini 16/5/2004 Questa guida ha lo scopo di mostrare gli aspetti fondamentali dell utilizzo dell applicazione Java Diagrammi ER. Inizieremo con

Dettagli

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

Nelle reti di calcolatori, le porte (traduzione impropria del termine. port inglese, che in realtà significa porto) sono lo strumento I protocolli del livello di applicazione Porte Nelle reti di calcolatori, le porte (traduzione impropria del termine port inglese, che in realtà significa porto) sono lo strumento utilizzato per permettere

Dettagli

Con accesso remoto s'intende la possibilità di accedere ad uno o più Personal Computer con un modem ed una linea telefonica.

Con accesso remoto s'intende la possibilità di accedere ad uno o più Personal Computer con un modem ed una linea telefonica. Tecnologie informatiche ACCESSO REMOTO CON WINDOWS Con accesso remoto s'intende la possibilità di accedere ad uno o più Personal Computer con un modem ed una linea telefonica. Un esempio di tale servizio

Dettagli

IPC Inter Process Communication

IPC Inter Process Communication Il protocollo TCP controlla che la trasmissione tra due end points avvenga correttamente. Non stabilisce alcun criterio su chi deve iniziare la comunicazione. Questo compito è svolto dalle applicazioni

Dettagli

APPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI

APPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI APPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI Indice 1 Le frazioni algebriche 1.1 Il minimo comune multiplo e il Massimo Comun Divisore fra polinomi........ 1. Le frazioni algebriche....................................

Dettagli

Guida informatica per l associazione #IDEA

Guida informatica per l associazione #IDEA Guida informatica per l associazione #IDEA Questa guida vi spiegherà come utilizzare al meglio gli strumenti informatici che utilizza l associazione #IDEA in modo da facilitare il coordinamento con tutti

Dettagli

Protocolli di Comunicazione

Protocolli di Comunicazione Protocolli di Comunicazione La rete Internet si è sviluppata al di fuori dal modello ISO-OSI e presenta una struttura solo parzialmente aderente al modello OSI. L'architettura di rete Internet Protocol

Dettagli

Funzioni in C. Violetta Lonati

Funzioni in C. Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Funzioni - in breve: Funzioni Definizione di funzioni

Dettagli

GLI INDIRIZZI DELL INTERNET PROTOCOL (IP ADDRESS) 2. Fondamenti sugli indirizzi dell Internet Protocol 2. Struttura di un indirizzo IP 2

GLI INDIRIZZI DELL INTERNET PROTOCOL (IP ADDRESS) 2. Fondamenti sugli indirizzi dell Internet Protocol 2. Struttura di un indirizzo IP 2 GLI INDIRIZZI DELL INTERNET PROTOCOL (IP ADDRESS) 2 Fondamenti sugli indirizzi dell Internet Protocol 2 Struttura di un indirizzo IP 2 Le classi degli indirizzi IP 3 Indirizzi di Classe A 3 Indirizzi di

Dettagli

A intervalli regolari ogni router manda la sua tabella a tutti i vicini, e riceve quelle dei vicini.

A intervalli regolari ogni router manda la sua tabella a tutti i vicini, e riceve quelle dei vicini. Algoritmi di routing dinamici (pag.89) UdA2_L5 Nelle moderne reti si usano algoritmi dinamici, che si adattano automaticamente ai cambiamenti della rete. Questi algoritmi non sono eseguiti solo all'avvio

Dettagli

IL MIO PRIMO SITO: NEWS

IL MIO PRIMO SITO: NEWS Pagina 1 IL MIO PRIMO SITO: NEWS Sommario IL MIO PRIMO SITO: NEWS...1 Introduzione...2 I Contenitori...2 Creo un Contenitore...3 I Tracciati...4 Creo le Notizie...6 Inserisco il Testo...6 Inserisco un

Dettagli

Esercitazione [5] Input/Output su Socket

Esercitazione [5] Input/Output su Socket Esercitazione [5] Input/Output su 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

Dettagli

Reti di Calcolatori. Il software

Reti di Calcolatori. Il software Reti di Calcolatori Il software Lo Stack Protocollare Application: supporta le applicazioni che usano la rete; Transport: trasferimento dati tra host; Network: instradamento (routing) di datagram dalla

Dettagli

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

UDP. Livello di Trasporto. Demultiplexing dei Messaggi. Esempio di Demultiplexing a.a. 2002/03 Livello di Trasporto UDP Descrive la comunicazione tra due dispositivi Fornisce un meccanismo per il trasferimento di dati tra sistemi terminali (end user) Prof. Vincenzo Auletta auletta@dia.unisa.it

Dettagli

4 3 4 = 4 x 10 2 + 3 x 10 1 + 4 x 10 0 aaa 10 2 10 1 10 0

4 3 4 = 4 x 10 2 + 3 x 10 1 + 4 x 10 0 aaa 10 2 10 1 10 0 Rappresentazione dei numeri I numeri che siamo abituati ad utilizzare sono espressi utilizzando il sistema di numerazione decimale, che si chiama così perché utilizza 0 cifre (0,,2,3,4,5,6,7,8,9). Si dice

Dettagli

A CU R A DI FR A NCESCO DE DOMINICIS

A CU R A DI FR A NCESCO DE DOMINICIS GUIDA TASKLIST E TASKKILL A CU R A DI FR A NCESCO DE DOMINICIS Tasklist e Taskkill sono due tra i più utili comandi per DOS. Permettono infatti la completa gestione dei processi in esecuzione sul sistema

Dettagli

LANCIAMO UN DADO PER DECIDERE CHI DEVE INIZIARE IL GIOCO. PARTIRA IL NUMERO PIU ALTO

LANCIAMO UN DADO PER DECIDERE CHI DEVE INIZIARE IL GIOCO. PARTIRA IL NUMERO PIU ALTO IL GIOCO DEL CALCIO I bimbi della sezione 5 anni sono molto appassionati al gioco del calcio. Utilizzo questo interesse per costruire e proporre un gioco con i dadi che assomigli ad una partita di calcio.

Dettagli

Transmission Control Protocol

Transmission Control Protocol Transmission Control Protocol Franco Callegati Franco Callegati IC3N 2000 N. 1 Transmission Control Protocol - RFC 793 Protocollo di tipo connection-oriented Ha lo scopo di realizzare una comunicazione

Dettagli

Esercizi su. Funzioni

Esercizi su. Funzioni Esercizi su Funzioni ๒ Varie Tracce extra Sul sito del corso ๓ Esercizi funz_max.cc funz_fattoriale.cc ๔ Documentazione Il codice va documentato (commentato) Leggibilità Riduzione degli errori Manutenibilità

Dettagli

Paradigma client-server

Paradigma client-server Interazione Client Server (socket) Vittorio Maniezzo Università di Bologna Vittorio Maniezzo Università di Bologna 15 CliSer - 1/31 Paradigma client-server Le applicazioni utente devono interagire con

Dettagli

L ultima fase di registrazione dei dati di una gara all interno del sistema informatico federale è l inserimento degli ordini di arrivo o classifiche.

L ultima fase di registrazione dei dati di una gara all interno del sistema informatico federale è l inserimento degli ordini di arrivo o classifiche. Come inserire le classifiche di gara nel sistema on line L ultima fase di registrazione dei dati di una gara all interno del sistema informatico federale è l inserimento degli ordini di arrivo o classifiche.

Dettagli

Guida all utilizzo del CRM

Guida all utilizzo del CRM Guida all utilizzo del CRM Indice: Creare un Lead Aggiungere una Nota o Allegato Aggiungere un promemoria di Chiamata Aggiungere un promemoria (compito) Aggiungere un promemoria di un Appuntamento on energy

Dettagli

Guida al sistema. Dott. Enea Belloni

Guida al sistema. Dott. Enea Belloni Sistema Gestionale Voucher Guida al sistema Dott. Enea Belloni Sommario della presentazione Il sistema informatico per la gestione delle domande L utente presentatore: diritti e responsabilità La pagina

Dettagli

4. Indirizzi Internet

4. Indirizzi Internet 4.1. Introduzione 4. Indirizzi Internet L'indirizzamento è una funzionalità essenziale di qualunque sistema di comunicazione, tanto più per un sistema che vuole essere universale, cioè in rado di connettere

Dettagli

Reti. Reti. IPv4: concetti fondamentali. arp (address resolution protocol) Architettura a livelli (modello OSI)

Reti. Reti. IPv4: concetti fondamentali. arp (address resolution protocol) Architettura a livelli (modello OSI) Reti Architettura a livelli (modello OSI) Prevede sette livelli: applicazione, presentazione, sessione, trasporto, rete, collegamento dei dati (datalink), fisico. TCP/IP: si può analizzare in maniera analoga

Dettagli

Proteggiamo il PC con il Firewall di Windows Vista

Proteggiamo il PC con il Firewall di Windows Vista Proteggiamo il PC con il Firewall di Windows Vista Il momento in cui un computer è più a rischio e soggetto ad attacchi informatici, è quando è connesso a internet. Per proteggere il nostro PC ed evitare

Dettagli

Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo.

Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo. DALLE PESATE ALL ARITMETICA FINITA IN BASE 2 Si è trovato, partendo da un problema concreto, che con la base 2, utilizzando alcune potenze della base, operando con solo addizioni, posso ottenere tutti

Dettagli

Informatica pratica. File e cartelle

Informatica pratica. File e cartelle Informatica pratica File e cartelle Riassunto della puntata precedente Abbiamo visto a cosa serve un word processor: Quali sono i suoi benefici rispetto alla macchina da scrivere tradizionale Quali sono

Dettagli

Strutturazione logica dei dati: i file

Strutturazione logica dei dati: i file Strutturazione logica dei dati: i file Informazioni più complesse possono essere composte a partire da informazioni elementari Esempio di una banca: supponiamo di voler mantenere all'interno di un computer

Dettagli

Programmazione socket. Queste slide sono distribuite con licenza Creative Commons Attribuzione-Non commerciale-condividi allo stesso modo 2.

Programmazione socket. Queste slide sono distribuite con licenza Creative Commons Attribuzione-Non commerciale-condividi allo stesso modo 2. Programmazione socket Queste slide sono distribuite con licenza Creative Commons Attribuzione-Non commerciale-condividi allo stesso modo 2.5 Italia Applicazioni di rete Realizzare un'applicazione di rete

Dettagli

Note Operative per Accedere alla Posta Elettronica Certificata (PEC) Obbligo Iscrizioni 2011

Note Operative per Accedere alla Posta Elettronica Certificata (PEC) Obbligo Iscrizioni 2011 Note Operative per Accedere alla Posta Elettronica Certificata (PEC) Obbligo Iscrizioni 2011 Indirizzo web = https://webmail.pec.leonet.it/ E possibile accedere anche dal nostro sito www.agriro.net (alias

Dettagli

Prova di Esame - Rete Internet (ing. Giovanni Neglia) Prova completa Martedì 15 Novembre 2005

Prova di Esame - Rete Internet (ing. Giovanni Neglia) Prova completa Martedì 15 Novembre 2005 Prova di Esame - Rete Internet (ing. Giovanni Neglia) Prova completa Martedì 15 Novembre 2005 Si svolga il compito su questi fogli. Nel caso di domande a risposta aperta, lo spazio lasciato sul foglio

Dettagli

INTRODUZIONE ALLE RETI: UN APPROCCIO PRATICO

INTRODUZIONE ALLE RETI: UN APPROCCIO PRATICO INTRODUZIONE ALLE RETI: UN APPROCCIO PRATICO okfabian@yahoo.com Fabian Chatwin Cedrati Ogni scheda di rete ha un indirizzo MAC univoco L'indirizzo IP invece viene impostato dal Sistema Operativo HUB 00:50:DA:7D:5E:32

Dettagli

Controllo Winsock di Visual Basic

Controllo Winsock di Visual Basic Controllo Winsock di Visual Basic Il controllo Winsock, non visibile all'utente, consente di accedere ai servizi di rete TCP e UDP. Per creare applicazioni client o server non è necessario conoscere in

Dettagli

NUOVA PROCEDURA COPIA ED INCOLLA PER L INSERIMENTO DELLE CLASSIFICHE NEL SISTEMA INFORMATICO KSPORT.

NUOVA PROCEDURA COPIA ED INCOLLA PER L INSERIMENTO DELLE CLASSIFICHE NEL SISTEMA INFORMATICO KSPORT. NUOVA PROCEDURA COPIA ED INCOLLA PER L INSERIMENTO DELLE CLASSIFICHE NEL SISTEMA INFORMATICO KSPORT. Con l utilizzo delle procedure di iscrizione on line la società organizzatrice ha a disposizione tutti

Dettagli

Capitolo 3. L applicazione Java Diagrammi ER. 3.1 La finestra iniziale, il menu e la barra pulsanti

Capitolo 3. L applicazione Java Diagrammi ER. 3.1 La finestra iniziale, il menu e la barra pulsanti Capitolo 3 L applicazione Java Diagrammi ER Dopo le fasi di analisi, progettazione ed implementazione il software è stato compilato ed ora è pronto all uso; in questo capitolo mostreremo passo passo tutta

Dettagli

Come masterizzare dischi con Nero 11

Come masterizzare dischi con Nero 11 Come masterizzare dischi con Nero 11 Non c è dubbio che Nero è diventato un sinonimo di masterizzatore di dischi, data la lunga esperienza sul mercato. Molte persone pensano in questo programma nel momento

Dettagli

Visual basic base Lezione 01. L'ambiente di sviluppo

Visual basic base Lezione 01. L'ambiente di sviluppo L'ambiente di sviluppo L'ambiente di sviluppo Visual basic è un linguaggio di programmazione Microsoft. In questo corso prenderemo in considerazione, l'ultima versione. net di questo linguaggio. Microsoft

Dettagli