Introduzione alla programmazione C di socket

Размер: px
Начинать показ со страницы:

Download "Introduzione alla programmazione C di socket"

Транскрипт

1 Introduzione alla programmazione C di socket (testo di riferimento : M. J. Donahoo, K. L. Calvert, TCP/IP Sockets in C: Practical Guide for Programmers. Morgan Kaufman Publishers. ) A.A. 2005/06 Una rete TCP/IP Organizzazione a livelli: relazione tra protocolli, applicazioni e API socket Socket API Implementazione dei protocolli (S.O.) Socket API TCP TCP IP HOST canale IP canale Es: ethernet Router IP HOST 1

2 Indirizzi La comunicazione tra programmi è possibile se si conosce l indirizzo dei programmi che devono comunicare Indirizzo Internet (usato da IP) identificatori a 32 bit notazione: identifica una interfaccia xxx.xxx Numero di porta (interpretato da TCP o UDP) identificatori a 16 bit (sempre in relazione ad un IP) range: Well-Known: Registered: Dynamic (private) Aplicazione www Porta Una Socket: una visione di insieme Una socket è un dispositivo che consente la comunicazione (trasferimento di dati) tra due processi su internet, in una LAN, su un singolo computer Esistono varie famiglie di socket. Ogni famiglia riunisce i socket che utilizzano gli stessi protocolli (Protocol Family) sottostanti, supporta un sottoinsieme di stili di comunicazione e possiede un proprio formato di indirizzamento (Address Family) Alcuni esempi di famiglie Unix Domain sockets: file in una directory di un computer local host. Consentono il trasferimento di dati tra processi sulla stessa macchina Unix Internet socket (AF_INET): consentono il trasferimento di dati tra processi posti su macchine remote connesse tramite una LAN o Internet 2

3 Una Socket: una visione di insieme (cont.) Il tipo di una socket definisce una modalità di comunicazione che una socket usa per inviare dati: Streaming Socket (SOCK_STREAM): Fornisce una connessione sequenziale, affidabile e full-duplex. Il protocollo TCP è basato su questo tipo di socket. Datagram socket (SOCK_DGRAM): Supporta i datagrammi (privo di connessione, messaggi inaffidabili di una lunghezza massima prefissata). Il protocollo UDP è basato su questo tipo di socket Osserviamo che: AF_INET + SOCK_STREAM determineranno una connessione TCP, AF_INET + SOCK_DGRAM determineranno una trasmissione UDP Socket, Protocolli e Porte su un singolo host Una socket che usa la famiglia di protocolli TCP/IP è univocamente determinata da un indirizzo internet, un protocollo di comunicazione (TCP o UDP) e un numero di porta Applicazioni Socket TCP Applicazioni Socket UDP Porte TCP TCP UDP Porte UDP IP Host Sockets bound to ports Descriptor reference 3

4 Una Socket: una visione di insieme (cont.) Nel gergo socket uno dei processi che comunicano è chiamato Server e l altro Client. Tra i due processi il server è quello che ha controllo maggiore, poiché è il processo che inizialmente crea la socket. Più client possono comunicare attraverso la stessa socket, ma solo un server può essere associato ad una definita socket. Il fatto che un programma agisca come client o come server determina un differente uso delle API Socket Il client ha bisogno di conoscere l indirizzo del server (ma non il viceversa) Il Server può apprendere informazioni sull indirizzo del client una volta stabilita la connessione Programmazione socket Lo sviluppatore ha il controllo di tutto ciò che sta sul lato del livello applicativo della socket, ma ha poco controllo sul lato a livello di trasporto (alcuni parametri) TCP UDP Livello di Livello di trasporto IP Host 4

5 Programmazione socket (cont.) Il client deve contattare il server Il programma server deve essere in esecuzione come processo Il programma server deve avere una porta (socket) che dia il benvenuto al contatto iniziale stabilito da un processo client in esecuzione Durante l handshake a tre vie: il TCP server crea un nuova socket (dedicata a quel particolare client socket di connessione) Il client contatta il server tramite: la creazione di una socket locale la specifica di un indirizzo del processo server (IP, numero di porta relativi al processo) Dopo la creazione della socket nel client: TCP avvia un handshake a tre vie e stabilisce una connessione TCP con il server Interazione TCP Client/Server Server 1. (Inizializzare una WSA) 2. Creare una socket 3. Assegnare un local address alla socket 4. Settare la socket all ascolto 5. Iterativamente: a. Accettare una nuova connessione b. Inviare e ricevere dati c. Chiudere la connessione Client 1. (Inizializzare una WSA) 2. Creare una Socket 3. Connettersi al server 4. Inviare e ricevere dati 5. Chiudere la connessione 5

6 Una astrazione di una socket: Strutture dati associate ad una socket TCP Closed Descrittori Struttura di una socket L applicazione fa riferimento alla struttura di una socket tramite descrittori differenti processi possono fare riferimento alla stessa struttura socket informazioni associate alla struttura socket: code di ricezione e invio informazioni sullo stato dell handshake (per una socket TCP) indirizzi internet Il ciclo di vita di una socket TCP Notazione Eventi all interno dell applicazione che causano il cambiamento di stato di una struttura socket connect() blocca Indirizzi:A.B.C.D = client W.X.Y.Z server Closed = porta del server Connecting P A.B.C.D W.X.Y.Z Handshake completato Established P A.B.C.D W.X.Y.Z Eventi come l arrivo di messaggi, ecc.. 6

7 Interazione TCP Client/Server Server 1. (Inizializzare una WSA) 2. Creare una socket 3. Assegnare un local address alla socket 4. Settare la socket all ascolto 5. Iterativamente: a. Accettare una nuova connessione b. Inviare e ricevere dati c. Chiudere la connessione Client 1. (Inizializzare una WSA) 2. Creare una Socket 3. Connettersi al server 4. Inviare e ricevere dati 5. Chiudere la connessione Il ciclo di vita di una socket TCP Stabilire una connessione (lato client) client Closed Una socket creata fa riferimento ad un protocollo specifico ma non ha indirizzo IP e numero diporta 7

8 Il ciclo di vita di una socket TCP Stabilire una connessione (lato client) client Closed connect() con IP W.X.Y.Z e porta blocca Completa i campi; Invia richiesta di connes. al server Connecting P A.B.C.D W.X.Y.Z P non in uso da altre socket indirizzo dell interfaccia attraverso cui vengono inviati i pacchetti al server Il ciclo di vita di una socket TCP Stabilire una connessione (lato client) client Closed connect() con IP W.X.Y.Z e porta blocca Completa i campi; Invia richiesta di connes. al server Connecting P A.B.C.D W.X.Y.Z Handshake a tre vie una richiesta di connessione client server Un ack server client Un ack client server 8

9 Il ciclo di vita di una socket TCP Stabilire una connessione (lato client) client connect() con IP W.X.Y.Z e porta blocca Closed Completa i campi; Invia richiesta di connes. al server Connecting P A.B.C.D W.X.Y.Z Handshake a tre vie completato Established P A.B.C.D W.X.Y.Z client il client considera la Il ciclo connessione di stabilita vita non di una socket TCP appena riceve l ack dal server se il server non accetta una connessione invia un messaggio connect() con IP W.X.Y.Z e porta Stabilire una connessione (lato client) blocca Closed Completa i campi; Invia richiesta di connes. al server Connecting P A.B.C.D W.X.Y.Z Handshake a tre vie completato Established P A.B.C.D W.X.Y.Z 9

10 Il ciclo di vita di una socket TCP(cont.) Setup della socket (lato server) server Closed il server deve legare la socket ad una porta locale nota al client () Il ciclo di vita di una socket TCP(cont.) Setup della socket (lato server) server Closed bind() con porta returns Setta indirizzo locale e porta Closed INADDR_ANY nel caso in cui il server ha più di un IP, consente alla socket di ricevere connessioni indirizzate da tutti i suoi IP 10

11 Il ciclo di vita di una socket TCP(cont.) Setup della socket (lato server) server ualunque richiesta di connessione che avviene prima della listen() verrà rigettata bind() con porta listen() returns Return Closed Setta indirizzo locale e porta Closed INADDR_ANY Setta all ascolto Listening nuove conn. INADDR_ANY Il ciclo di vita di una socket TCP(cont.) Accettare la connessione (lato server) accept() Blocca sino alla connessione con un client Listening nuove conness. 11

12 Il ciclo di vita di una socket TCP(cont.) Gestione della richiesta di connessione in entrata Richiesta di connessione da A.B.C.D/P Listening nuove connessi. Processo trasparente Creare una nuova socket per la connessione, settare gli indirizzi e continuare l handshake Connecting W.X.Y.Z P A.B.C.D ack server client IP di destinazione IP e porta del mittente Il ciclo di vita di una socket TCP(cont.) Gestione della richiesta di connessione in entrata Richiesta di connessione da A.B.C.D/P Listening nuove connessi. Processo trasparente Creare una nuova socket per la connessione, settare gli indirizzi e continuare l handshake Connecting W.X.Y.Z P A.B.C.D il numero di porta locale è lo stesso per le due socket La socket originale non cambia stato 12

13 Il ciclo di vita di una socket TCP(cont.) Gestione della richiesta di connessione il server non in entrata Richiesta di connessione da A.B.C.D/P Listening nuove connessi. Processo trasparente Creare una nuova socket per la connessione, settare gli indirizzi e continuare l handshake Connecting W.X.Y.Z P A.B.C.D considera la connessione stabilita finchè non viene inviato il terzo messaggio Established Handshake completato W.X.Y.Z P A.B.C.D Il ciclo di vita di una socket TCP(cont.) Accettare la connessione (lato server) Listening nuove conness. accept() Blocca sino alla connessione con un client Evento descritto in Richiesta di connessione in entrata Established W.X.Y.Z P A.B.C.D Ritorna il descrittore per questa socket (socket di connessione) Rimuove la socket dalla lista di nuove conness. Listening Nuove connessi. 13

14 Il ciclo di vita di una socket TCP(cont.) Chiudere la connessione (indipendente dal lato) close() Returns immediately Established Ha inizio un P handshake di chiusura, Il descrittore A.B.C.D viene deallocato W.X.Y.Z un msg di chiusura viene inviato all altra parte (fine dati da trasferire) un ack per questo msg viene inviato Terminazione senza perdita di dati in transito Il ciclo di vita di una socket TCP(cont.) Chiudere la connessione (indipendente dal lato) close() Returns immediately Established Ha inizio un P handshake di chiusura, Il descrittore A.B.C.D viene deallocato W.X.Y.Z un msg di chiusura viene inviato all altra parte (fine dati da trasferire) un ack per questo msg viene ricevuto La connessione viene chiusa completamente solo quando un handshake simile avviene in direzione opposta Terminazione senza perdita di dati in transito 14

15 Il ciclo di vita di una socket TCP(cont.) Chiudere la connessione (indipendente dal lato) close() Returns immediately Established Ha inizio un Closed handshake di P chiusura, P Il descrittore A.B.C.D viene A.B.C.D deallocato W.X.Y.Z W.X.Y.Z Hs msg Half-Closed P A.B.C.D W.X.Y.Z Terminazione senza perdita di dati in transito Il ciclo di vita di una socket TCP(cont.) Chiudere la connessione (indipendente dal lato) close() Returns immediately Established Ha inizio un Closed handshake di P chiusura, P Il descrittore A.B.C.D viene A.B.C.D deallocato W.X.Y.Z W.X.Y.Z Hs msg Half-Closed P A.B.C.D W.X.Y.Z Hs ack Terminazione senza perdita di dati in transito Time-wait P A.B.C.D W.X.Y.Z 15

16 Funzione socket() Crea una socket dedicata ad un fornitore di servizi specifico SOCKET socket( int af, int type, int protocol ); Tipo SOCK_STREAM SOCK_DGRAM Address family (AF_INET: Internet Address Family) Significato Tipo di socket Fornisce una connessione sequenziale, affidabile e full-duplex. Il protocollo TCP è basato su questo tipo di socket. Supporta i datagrammi (privo di connessione, messaggi inaffidabili di una lunghezza massima prefissata). Il protocollo UDP è basato su questo tipo di socket. Protocollo da usare con la socket per l address family indicata (solitamente posto a 0 indica il protocollo derivato dalla coppia [af, type]) Funzione socket(): valori di ritorno Crea una socket dedicata ad un fornitore di servizi specifico SOCKET socket( int af, int type, int protocol ); La funzione restituisce un intero che è interpretato come un descrittore che referenzia la nuova socket in caso di successo. Altrimenti restituisce un codice di errore 16

17 Funzione socket(): valori di ritorno Crea una socket dedicata ad un fornitore di servizi specifico SOCKET socket( int af, int type, int protocol ); La funzione restituisce un intero che è interpretato come un descrittore che referenzia la nuova socket in caso di successo. Altrimenti restituisce un codice di errore ATTENZIONE!!! Una applicazione client usa indirizzo IP e porta per connettersi La funzione crea un socket senza nome Bind() Address Family Indirizzo IP Porta che identifica l applicazione Funzione bind() Associa un nome alla socket creata in precedenza int bind( SOCKET s, const struct sockaddr name, int namelen); Descrittore di un socket Indirizzo da assegnare alla socket Lunghezza in byte di name 17

18 Struttura sockaddr_in La struttura sockaddr è interpretata differentemente a seconda dei contesti determinati dalle differenti address family (AF_XXXX). Forma di sockaddr In AF_INET (con protocollo IPv4) struct sockaddr_in { short sin_family; u_short sin_port; struct in_addr sin_addr; char sin_zero[8]; }; Un puntatore ad una sockaddr non è rigorosamente interpretato come tale Le funzioni Winsock che fanno uso di un puntatore ad una struttura di tipo sockaddr devono necessariamente effettuare una operazione di cast bind( m_socket, (SOCKADDR) &service, sizeof(service) Funzione bind(): valori di ritorno Associa un nome alla socket creata in precedenza int bind( SOCKET s, const struct sockaddr name, int namelen); La funzione restituisce O in caso di successo. Altrimenti restituisce un codice di errore Per il TCP/IP se la porta è specificata come zero, il fornitore di servizi assegna una porta tra 1024 e 5000 L applicazione può usare la funzione getsockname (dopo la bind) per apprendere l indirizzo IP e la porta assegnati 18

19 #include <stdio.h> #include "winsock2.h" un esempio di codice void main() { // Initialize Winsock WSADATA wsadata; int iresult = WSAStartup(MAKEWORD(2,2), &wsadata); if (iresult!= NO_ERROR) printf("error at WSAStartup()\n"); // Create a SOCKET for listening for incoming connection requests SOCKET ListenSocket; ListenSocket = socket(af_inet, SOCK_STREAM, IPPROTO_TCP); if (ListenSocket == INVALID_SOCKET) { printf("error at socket(): %ld\n", WSAGetLastError()); WSACleanup(); return; } // The sockaddr_in structure specifies the address family, IP address, and port for the socket that //is being bound. sockaddr_in service; service.sin_family = AF_INET; service.sin_addr.s_addr = inet_addr(" "); service.sin_port = htons(27015); un esempio di codice (cont.) // Bind the socket. if (bind( ListenSocket, (SOCKADDR) &service, sizeof(service)) == SOCKET_ERROR) { printf("bind() failed.\n"); closesocket(listensocket); return; } WSACleanup(); return; } 19

20 Funzione listen() Setta la socket in uno stato in cui rimane in attesa di richiesta di connessioni int listen( SOCKET s, int backlog); Descrittore di un socket Massima lungezza della coda di connessioni entranti Funzione listen(): valori di ritorno Setta la socket in uno stato in cui rimane in attesa di richiesta di connessioni int listen( SOCKET s, int backlog); Descrittore di un socket Massima lungezza della coda di connessioni entranti La funzione restituisce O in caso di successo. Altrimenti restituisce un codice di errore 20

21 Funzione accept() Consente un tentativo di connessione in entrata su una socket SOCKET accept( SOCKET s, struct sockaddr addr, int addrlen); Descrittore di un socket Puntatore opzionale ad un buffer che riceve l indirizzo dell entità che fa richiesta di connessione Puntatore opzionale checontienela lunghezza di addr Funzione accept() Consente un tentativo di connessione in entrata su una socket SOCKET accept( SOCKET s, struct sockaddr addr, int addrlen); La funzione estrae la prima connessione dalla coda di pendenza delle connessioni sul socket s. Successivamente crea e restituisce un riferimento ad una nuova socket. uesta nuova socket è quella che abbiamo chiamato socket di connessione. Mantiene le stesse prorpieta della socket s 21

22 Funzione connect() Stabilisce una connessione ad una socket specificata int connect( SOCKET s, const struct sockaddr name, int namelen); Descrittore di un socket non connesso Nome della socket con cui dovrebbe essere stabilita la connessione lunghezza di name Funzione connect() Stabilisce una connessione ad una socket specificata int connect( SOCKET s, const struct sockaddr name, int namelen); Per una socket di tipo connectionless (per esempio SOCK_DGRAM), la connect() semplicemente stabilisce un indirizzo di destinazione di default ualunque datagram ricevuto da un indirizzo diverso da quello di destinazione verrà scaricato Se il campo indirizzo della struttura che specifica il name è zero, la socket verrà disconnessa 22

23 #include <stdio.h> #include "winsock2.h" void main() { un esempio di codice // Initialize Winsock WSADATA wsadata; int iresult = WSAStartup(MAKEWORD(2,2), &wsadata); if (iresult!= NO_ERROR) printf("error at WSAStartup()\n"); // Create a SOCKET for connecting to server SOCKET ConnectSocket; ConnectSocket = socket(af_inet, SOCK_STREAM, IPPROTO_TCP); if (ConnectSocket == INVALID_SOCKET) { printf("error at socket(): %ld\n", WSAGetLastError()); WSACleanup(); return; } un esempio di codice (cont.) // The sockaddr_in structure specifies the address family, // IP address, and port of the server to be connected to. sockaddr_in clientservice; clientservice.sin_family = AF_INET; clientservice.sin_addr.s_addr = inet_addr( " " ); clientservice.sin_port = htons( ); // Connect to server. if ( connect( ConnectSocket, (SOCKADDR) &clientservice, sizeof(clientservice) ) == SOCKET_ERROR) { printf( "Failed to connect.\n" ); WSACleanup(); return; } printf("connected to server.\n"); WSACleanup(); return; } 23

24 Funzione send() Invia dati ad una socket connessa int send( SOCKET s, const char buf, int len, int flags ); Descrittore di una socket connessa Puntatore al Buffer contenente I dati da trasmettere Indicatore che specifica il modo in cui la chiamata è fatta Lunghezza dei dati in buf, in byte Il flag può essere usato per influenzare il comportamento della funzione Funzione send(): valori di ritorno Invia dati ad una socket connessa int send( SOCKET s, const char buf, int len, int flags ); Descrittore di una socket connessa Buffer contenente I dati da trasmettere Indicatore che specifica il modo in cui la chiamata è fatta Lunghezza dei dati in buf, in byte Il flag può essere usato per influenzare il comportamento della funzione La funzione restituisce il numero di byte trasmessi in caso di successo. Un codice di errore, altrimenti 24

25 Funzione recev() Riceve dati da una socket connessa (o legata ) int recev(socket s, char buf, int len, int flags ); Descrittore di una socket connessa Puntatore al Buffer contenente I dati da ricevere Indicatore che specifica il modo in cui la chiamata è fatta Lunghezza dei dati in buf, in byte Il flag può essere usato per influenzare il comportamento della funzione Interazione UDP Client/Server Server 1. (Inizializzare una WSA) 2. Creare una socket 3. Assegnare un local address alla socket 4. Iterativamente: a. Inviare e ricevere dati b. Chiudere la connessione Client 1. (Inizializzare una WSA) 2. Creare una Socket 3. Inviare e ricevere dati 4. Chiudere la connessione 25

26 Funzione recevfrom() Riceve un datagram e memorizza l indirizzo da cui i dati sono stati inviati int recvfrom( SOCKET s, char buf, int len, int flags, struct sockaddr from, int fromlen); Descrittore di una socket (eventualmente) connessa Lunghezza dei dati in buf, in byte Puntatore opzionale ad una struttura che contiene l indirizzo della socket target Buffer contenente I dati in ingresso Indicatore che specifica il modo in cui la chiamata è fatta Lunghezza dei dati in from, in byte Il flag può essere usato per influenzare il comportamento della funzione La funzione è normalmente usata per socket non orientate alla connessione. L indirizzo locale della socket deve essere noto Per applicazioni Server, questo è fatto esplicitamente con la funzione bind() Il binding esplicito è scoraggiato per applicazioni client (in tal caso la funxzione effettua un binding implicito #include <stdio.h> #include "winsock2.h" void main() { WSADATA wsadata; SOCKET RecvSocket; sockaddr_in RecvAddr; int Port = 27015; char RecvBuf[1024]; int BufLen = 1024; un esempio di codice sockaddr_in SenderAddr; int SenderAddrSize = sizeof(senderaddr); // // Initialize Winsock WSAStartup(MAKEWORD(2,2), &wsadata); // // Create a receiver socket to receive datagrams RecvSocket = socket(af_inet, SOCK_DGRAM, 0); //

27 un esempio di codice (cont.) // Bind the socket to any address and the specified port. RecvAddr.sin_family = AF_INET; RecvAddr.sin_port = htons(port); RecvAddr.sin_addr.s_addr = htonl(inaddr_any); bind(recvsocket, (SOCKADDR ) &RecvAddr, sizeof(recvaddr)); // // Call the recvfrom function to receive datagrams // on the bound socket. printf("receiving datagrams...\n"); recvfrom(recvsocket,recvbuf,buflen,0, (SOCKADDR)&SenderAddr, &SenderAddrSize); // // Close the socket when finished receiving datagrams printf("finished receiving. Closing socket.\n"); closesocket(recvsocket); // // Clean up and exit. printf("exiting.\n"); WSACleanup(); return; } Funzione sendto() Invia dati ad una specifica destinazione int sendto( SOCKET s, const char buf, int len, int flags, const struct sockaddr to, int tolen); Descrittore di una socket (eventualmente) connessa Buffer contenente I dati da trasmettere Lunghezza dei dati in buf, in byte Puntatore opzionale ad una struttura che contiene l indirizzo della socket target Indicatore che specifica il modo in cui la chiamata è fatta Lunghezza dei dati in to, in byte Il flag può essere usato per influenzare il comportamento della funzione La funzione è normalmente usata per socket non orientate alla connessione per inviare datagram ad una specifica socket identificata dai parametri. I parametri to e tolen vengono ignorati in caso di socket orientate alla connessione e la funzione diventa equivalente ad una send() 27

28 Funzione sendto():valori di ritorno Invia dati ad una specifica destinazione int sendto( SOCKET s, const char buf, int len, int flags, const struct sockaddr to, int tolen); Descrittore di una socket (eventualmente) connessa Buffer contenente I dati da trasmettere Lunghezza dei dati in buf, in byte Puntatore opzionale ad una struttura che contiene l indirizzo della socket target Indicatore che specifica il modo in cui la chiamata è fatta Lunghezza dei dati in to, in byte La funzione restituisce il numero di byte trasmessi in caso di successo. Un codice di errore, altrimenti #include <stdio.h> #include "winsock2.h" void main() { un esempio di codice WSADATA wsadata; SOCKET SendSocket; sockaddr_in RecvAddr; int Port = 27015; char SendBuf[1024]; int BufLen = 1024; // // Initialize Winsock WSAStartup(MAKEWORD(2,2), &wsadata); // // Create a socket for sending data SendSocket = socket(af_inet, SOCK_DGRAM, IPPROTO_UDP); 28

29 un esempio di codice (cont.) // // Set up the RecvAddr structure with the IP address of // the receiver (in this example case " ") // and the specified port number. RecvAddr.sin_family = AF_INET; RecvAddr.sin_port = htons(port); RecvAddr.sin_addr.s_addr = inet_addr(" "); // // Send a datagram to the receiver printf("sending a datagram to the receiver...\n"); sendto(sendsocket,sendbuf,buflen,0,(sockaddr ) &RecvAddr, sizeof(recvaddr)); // // When the application is finished sending, close the socket. printf("finished sending. Closing socket.\n"); closesocket(sendsocket); // // Clean up and quit. printf("exiting.\n"); WSACleanup(); return; } Cambiare una applicazione winsock in una socket Unix windows #include <stdio.h> #include <stdlib.h> #include <winsock.h> File header Include tutti tutte le definizioni e i prototipi Per socket(), connect(), send(), recev() Per sockaddrin unix #include <stdio.h> #include <stdlib.h> #include < sys/socket.h > #include <arpa/inet.h> 29

30 Setup dell applicazione Il codice è identico a meno del codice per inizializzare l applicazione windows WSADATA wsadata; Int iresult = WSAStartup(MAKEWORD(2,2), &wsadata); If (iresult!= NO_ERROR) printf( error at WSASturtup\n ); Codice di inizializzazione della libreria winsock comunicazione Il codice è identico Chiusura dell applicazione windows Closesocket(m_socket); WSAcleanup(); Exit(0) De-allocazione delle risorse usate da winsock unix Close(m_socket); Exit(0) 30

31 Gestione dell errore windows #include<stdio.h> #include<stdlib.h> #include<winsock.h> void ErrorManagement(char errormessage) { printf( "Error at socket(): %ld\n", WSAGetLastError() ); WSACleanup(); exit(1); } unix #include<stdio.h> #include<stdlib.h> void ErrorManagement(char errormessage) { perror(errormessage); exit(1); } 31

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

Подробнее

L uso di Socket UDP. TCP vs. UDP UDP

L uso di Socket UDP. TCP vs. UDP UDP L uso di Socket UDP TCP TCP vs. UDP UDP 1 Interazione UDP Client/Server Server 1. Creare un socket 2. Assegnare un local address al socket 3. Iterativamente: a. Inviare e ricevere dati 4. Chiudere il socket

Подробнее

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

Подробнее

Laboratorio di Programmazione in Rete

Laboratorio di Programmazione in Rete Laboratorio di rogrammazione in Rete a.a. 2005/2006 http://www.di.uniba.it/~lisi/courses/prog-rete/prog-rete0506.htm dott.ssa Francesca A. Lisi [email protected] Orario di ricevimento: mercoledì ore 10-12

Подробнее

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

Подробнее

Opzioni per le Socket

Opzioni per le Socket Opzioni per le Socket A.A. 2005/06 Opzioni per le Socket Ogni socket aperto ha delle proprietà che ne determinano alcuni comportamenti Le opzioni del socket consentono di modificare tali proprietà Ogni

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

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

Подробнее

Una prima applicazione in C per l utilizzo delle socket

Una prima applicazione in C per l utilizzo delle socket Una prima applicazione in C per l utilizzo delle socket Richiamo sulle socket Socket in Windows (WinSock) Differenze tra sistemi operativi D. Gendarmi Socket API API: Application Programming Interface

Подробнее

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

Подробнее

Esercitazione [6] Client/Server con Socket

Esercitazione [6] Client/Server con Socket Esercitazione [6] Client/Server con Socket Leonardo Aniello - [email protected] Daniele Cono D'Elia - [email protected] Sistemi di Calcolo - Secondo modulo (SC2) Programmazione dei Sistemi di

Подробнее

Lo strato di applicazione in Internet

Lo strato di applicazione in Internet Lo strato di applicazione in Internet Prof. Ing. Carla Raffaelli a.a. 2004/2005 Protocolli applicativi Sono i protocolli utilizzati dalle applicazioni per scambiarsi informazioni Esempi: HTTP per il web,

Подробнее

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

Подробнее

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

Подробнее

Cenni di programmazione distribuita in C++ Mauro Piccolo [email protected]

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

Подробнее

INTERNET DOMAIN SOCKETS (Cap.59)

INTERNET DOMAIN SOCKETS (Cap.59) INTERNET DOMAIN SOCKETS (Cap.59) Internet Domain Stream Socket TCP Internet Domain Datagram Socket UDP A differenza degli UDDS I datagrams possono essere persi duplicati o arrivare in un ordine diverso

Подробнее

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

Подробнее

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

Подробнее

Elementi di programmazione con interfaccia Socket

Elementi di programmazione con interfaccia Socket Struttura generale per stream sockets Socket() Well-Known Port Bind() Elementi di programmazione con interfaccia Socket Cenni di programmazione secondo la nuova interfaccia Socket definita nella RFC 2553

Подробнее

Le Reti Informatiche

Le Reti Informatiche Le Reti Informatiche modulo 8 Prof. Salvatore Rosta www.byteman.it [email protected] 1 Il Livello di Trasporto: 1 L utente non ha il controllo sulla rete; non può risolvere i problemi di un servizio inadeguato

Подробнее

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

Подробнее

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

Подробнее

Guida all' uso dei sockets nella programmazione in C

Guida all' uso dei sockets nella programmazione in C 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

Подробнее

Instradamento. Fondamenti di Informatica

Instradamento. Fondamenti di Informatica Instradamento Fondamenti di Informatica Previously on Fondamenti di Livelli e protocolli Livello fisico Fibra, DSL, Ethernet informatica Network Network: ogni nodo può inviare un messaggio a qualsiasi

Подробнее

MODELLI ISO/OSI e TCP/IP

MODELLI ISO/OSI e TCP/IP PARTE I - Reti di Calcolatori ed Internet MODELLI ISO/OSI e TCP/IP 2.1 Reti di Calcolatori Livelli e Servizi Il modello OSI Il modello TCP/IP Un confronto tra OSI e TCP/IP ARPANET Ethernet Reti ATM reti

Подробнее

unsigned long inet_addr(cp) char *cp;

unsigned long inet_addr(cp) char *cp; /* bcopystru.c #include struct point int x; char *y; ; struct point a, b; struct pint *pta, *ptb; a.x = 5; a.y = pippo ; b = a; printf i valori del secondo point sono: %d %s\n,b.x,b.y); pta=

Подробнее

MODELLI ISO/OSI e TCP/IP

MODELLI ISO/OSI e TCP/IP PARTE I - Reti di Calcolatori ed Internet MODELLI ISO/OSI e TCP/IP Reti di Calcolatori Livelli e Servizi Il modello OSI Il modello TCP/IP Un confronto tra OSI e TCP/IP ARPANET Ethernet Reti ATM reti wireless

Подробнее

Strato di trasporto. Livello di applicazione SAP. Livello di trasporto. Livello di rete SAP

Strato di trasporto. Livello di applicazione SAP. Livello di trasporto. Livello di rete SAP Strato di trasporto Lo strato di trasporto si colloca al livello 4 dello strato ISO-OSI e svolge il compito di mettere in comunicazione diversi processi software. La comunicazione tra applicazioni avviene

Подробнее

request reply richiesta client processo di servizio processo server principale From - Valeria Cardellini, Corso Sist. Distr. A.A.

request reply richiesta client processo di servizio processo server principale From - Valeria Cardellini, Corso Sist. Distr. A.A. Applicazioni di rete Forniscono i servizi di alto livello utilizzati dagli utenti Determinano la percezione di qualità del servizio (QoS) che gli utenti hanno della rete sottostante Programmazione di applicazioni

Подробнее

TCP/IP: summary. Lorenzo Cavallaro, Andrea Lanzi

TCP/IP: summary. Lorenzo Cavallaro, Andrea Lanzi Università degli Studi di Milano Facoltà di Scienze Matematiche, Fisiche e Naturali Corso di Laurea in Informatica December 7, 2004 Sommario 1 La suite di protocolli TCP/IP Layer 2 3 4 5 6 Sommario 1 La

Подробнее

Applicazione distribuita

Applicazione distribuita La programmazione di applicazioni distribuite in C Il concetto di applicazione distribuita L architettura di una applicazione distribuita Il paradigma a scambio di messaggi Il paradigma client-server Il

Подробнее

Il modello Client/Server. La comunicazione

Il modello Client/Server. La comunicazione Il modello Client/Server La comunicazione Se sintetizziamo uno scenario completo possiamo identificare diverse interfacce di comun icazione: Interfaccia di comuncazione: insieme delle API necessarie alla

Подробнее

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

Подробнее

Il livello di Trasporto del TCP/IP

Il livello di Trasporto del TCP/IP Il livello di Trasporto del TCP/IP Il compito del livello transport (livello 4) è di fornire un trasporto efficace dall'host di origine a quello di destinazione, indipendentemente dalla rete utilizzata.

Подробнее

Livello di trasporto: meccanismi trasferimento dati affidabile, TCP

Livello di trasporto: meccanismi trasferimento dati affidabile, TCP Livello di trasporto: meccanismi trasferimento dati affidabile, TCP Gaia Maselli Queste slide sono un adattamento delle slide fornite dal libro di testo e pertanto protette da copyright. - Copyright 2013

Подробнее

Creare un'elementare backdoor in C in ambiente UNIX

Creare un'elementare backdoor in C in ambiente UNIX Creare un'elementare backdoor in C in ambiente UNIX DISCLAIMER: Questo tutorial è a solo scopo didattico. L'autore NON si prende alcuna responsabilità circa usi errati o non legali delle informazioni qui

Подробнее

Telematica di Base. IL Livello di Trasporto TCP

Telematica di Base. IL Livello di Trasporto TCP Telematica di Base IL Livello di Trasporto TCP TCP RFCs: 793, 1122, 1323, 2018, 2581 point-to-point: Un sender, un receiver affidabile protocollo di tipo pipeline: Meccanismi per evitare la congestione,

Подробнее

Livello trasporto. Servizi del livello trasporto

Livello trasporto. Servizi del livello trasporto ivello trasporto Servizi Multiplexing e demultiplexing Trasporto senza connessione: UDP Principi di trasferimento affidabile Trasporto orientato alla connessione: TCP Struttura del segmento Trasferimento

Подробнее

Configurazione delle interfacce di rete

Configurazione delle interfacce di rete Configurazione delle interfacce di rete A.A. 2006/2007 Alessandro Botticelli Instradamento dei datagrammi IP Routing : scelta del percorso su cui inviare i dati i router formano struttura interconnessa

Подробнее

SERVER CLIENT. Struttura di un Applicazione UDP. Socket UDP. Parametri di sendto. Funzioni di Input/Output. Prof. Vincenzo Auletta

SERVER CLIENT. Struttura di un Applicazione UDP. Socket UDP. Parametri di sendto. Funzioni di Input/Output. Prof. Vincenzo Auletta I semestre 03/04 Struttura di un Applicazione UDP Socket UDP socket() bind() Prof. Vincenzo Auletta [email protected] http://www.dia.unisa.it/professori/auletta/ CLIENT socket() sendto() Dati (richiesta)

Подробнее

Server Iterativi. Server TCP Ricorsivi. Fork. Server Ricorsivi. un server iterativo gestisce una connessione alla volta. Prof.

Server Iterativi. Server TCP Ricorsivi. Fork. Server Ricorsivi. un server iterativo gestisce una connessione alla volta. Prof. Università degli studi di Salerno Laurea in Informatica a.a. 2003/04 TCP Ricorsivi Prof. Vincenzo Auletta [email protected] http://www.dia.unisa.it/professori/auletta/ 1 Iterativi un server iterativo

Подробнее

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

Подробнее

Comunicazione tra Computer. Protocolli. Astrazione di Sottosistema di Comunicazione. Modello di un Sottosistema di Comunicazione

Comunicazione tra Computer. Protocolli. Astrazione di Sottosistema di Comunicazione. Modello di un Sottosistema di Comunicazione I semestre 03/04 Comunicazione tra Computer Protocolli Prof. Vincenzo Auletta [email protected] http://www.dia.unisa.it/professori/auletta/ Università degli studi di Salerno Laurea in Informatica 2

Подробнее

Architettura e servizi Internet

Architettura e servizi Internet Architettura e servizi Internet Laboratorio di Sistemi Operativi Corso di Laurea in Informatica Università degli Studi dell'aquila A.A. 2011/2012 Romina Eramo materiale tratto da: Fazio Vincenzo e-mail:

Подробнее

Networking. Mauro Migliardi Ph. D.

Networking. Mauro Migliardi Ph. D. Software Architectures Networking Mauro Migliardi Ph. D. A word of wisdom The word networking strikes fear in the hearts of many programmers. Fear not! Using the networking capabilities provided in the

Подробнее

Indirizzamento IP. Politecnico di Milano Facoltà di Ingegneria dell Informazione

Indirizzamento IP. Politecnico di Milano Facoltà di Ingegneria dell Informazione Politecnico di Milano Facoltà di Ingegneria dell Informazione Indirizzamento IP -Indirizzamento classful -Subnetting e Supernetting -Indirizzamento classless Reti TCP/IP Reti a pacchetto (datagram) Mediante

Подробнее

Architetture di rete. 4. Le applicazioni di rete

Architetture di rete. 4. Le applicazioni di rete Architetture di rete 4. Le applicazioni di rete Introduzione L avvento di tecnologie (hw, sw, protocolli) di rete avanzate ha permesso la nascita di architetture software molto evolute che permettono lo

Подробнее

Corso di Reti di Telecomunicazioni. Giovanni Schembra. Trasmissione trame su canale broadcast

Corso di Reti di Telecomunicazioni. Giovanni Schembra. Trasmissione trame su canale broadcast Indirizzi LAN e ARP Corso di Reti di Telecomunicazioni Giovanni Schembra 1 Trasmissione trame su canale broadcast I nodi di una LAN si scambiano trame su un canale broadcast: quando un nodo in una LAN

Подробнее

Esercizio Trasferimento File e Multicast

Esercizio Trasferimento File e Multicast Esercizio Esercizio Trasferimento File e Esercitazione di Laboratorio 14/11/2007 Esercizio Trasferimento File e Esercizio Esercizio Trasferimento File Sviluppare un applicazione distribuita che offra il

Подробнее

Mariarosaria Napolitano. Architettura TCP/IP. Corso di: Laboratorio di tecnologie informatiche e telematiche

Mariarosaria Napolitano. Architettura TCP/IP. Corso di: Laboratorio di tecnologie informatiche e telematiche Mariarosaria Napolitano Architettura TCP/IP Corso di: Laboratorio di tecnologie informatiche e telematiche Contesto e Prerequisiti Contesto E' rivolto agli studenti del V anno degli Istituti Tecnici Industriali

Подробнее