datagram socketdisys/chat-socket-ang-diom-vit.pdf · definizione ! supporta i datagram ! privo di...

23
DATAGRAM SOCKET Angelastro Sergio Diomede Antonio Viterbo Tommaso

Upload: others

Post on 20-Apr-2020

11 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: DATAGRAM SOCKETdisys/CHAT-Socket-Ang-Diom-Vit.pdf · Definizione ! supporta i datagram ! privo di connessione ! messaggi inaffidabili di una lunghezza massima prefissata ! il protocollo

DATAGRAM SOCKET

Angelastro Sergio

Diomede Antonio

Viterbo Tommaso

Page 2: DATAGRAM SOCKETdisys/CHAT-Socket-Ang-Diom-Vit.pdf · Definizione ! supporta i datagram ! privo di connessione ! messaggi inaffidabili di una lunghezza massima prefissata ! il protocollo

Definizione

´  supporta i datagram

´  privo di connessione

´  messaggi inaffidabili di una lunghezza massima prefissata

´  il protocollo UDP supporta questo tipo di socket

´  AF_INET (formato di indirizzamento) + SOCK_DGRAM (tipologia pacchetto) -> trasmissione UDP

Page 3: DATAGRAM SOCKETdisys/CHAT-Socket-Ang-Diom-Vit.pdf · Definizione ! supporta i datagram ! privo di connessione ! messaggi inaffidabili di una lunghezza massima prefissata ! il protocollo

Realizzazione

´  E’ stata stata realizzata un’applicazione per la comunicazione tra due host che utilizza le socket basate sul protocollo UDP

´  L’applicazione è cross platform

´  Libreria windows: winsock32

´  Libreria Linux: sys/socket, arpa/inet

Page 4: DATAGRAM SOCKETdisys/CHAT-Socket-Ang-Diom-Vit.pdf · Definizione ! supporta i datagram ! privo di connessione ! messaggi inaffidabili di una lunghezza massima prefissata ! il protocollo

Development Tools

´  Ambiente di sviluppo: Eclipse Kepler

´  Linguaggio di programmazione: C

´  Compilatore: MinGW

Page 5: DATAGRAM SOCKETdisys/CHAT-Socket-Ang-Diom-Vit.pdf · Definizione ! supporta i datagram ! privo di connessione ! messaggi inaffidabili di una lunghezza massima prefissata ! il protocollo

Schema Generale

Server Client

Socket()

Bind()

Recevefrom()

Aspetta un datagramma

sendto()

close()

Socket()

sendto()

Recevefrom()

close()

Dati (richiesta)

Dati (risposta)

Creazione di un socket

Assegna il proprio IP alla socket

Creazione di un socket

Itera

tiva

me

nte

In

via

e ri

ce

ve

me

ssa

gg

i

Invi

a e

ric

eve

m

ess

ag

gi

Chiusura socket Chiusura socket

Page 6: DATAGRAM SOCKETdisys/CHAT-Socket-Ang-Diom-Vit.pdf · Definizione ! supporta i datagram ! privo di connessione ! messaggi inaffidabili di una lunghezza massima prefissata ! il protocollo

Server(1)

void setSockAddr_in2(char IP[IPMAX]) { memset(&infoServerPers, 0, sizeof(infoServerPers)); infoServerPers.sin_family = PF_INET; infoServerPers.sin_port = htons(PORT); infoServerPers.sin_addr.s_addr = inet_addr(IP); }

sockAddr_in infoServerPers è una variabile che è costituita da: Campo1- sin_family famiglia di indirizzi Campo2- sin_port: porta sulla quale c’è il servizio Campo3- sin_addr.s_addr: proprio IP address Memset: inizializza i campi della variabile

Page 7: DATAGRAM SOCKETdisys/CHAT-Socket-Ang-Diom-Vit.pdf · Definizione ! supporta i datagram ! privo di connessione ! messaggi inaffidabili di una lunghezza massima prefissata ! il protocollo

Server(2)

1)if((sock=socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP))<0) ErrorHandler("socket() failed");

2)if((bind(sock,(struct sockaddr*)&infoServerPers, sizeof(infoServerPers)))<0)

ErrorHandler("bind() failed");

1) 2)

printf("\nLa socket del server e' stata creata: %d",sock);

printf("\nBind: La socket e' stata collegata al proprio indirizzo IP.\n");

Page 8: DATAGRAM SOCKETdisys/CHAT-Socket-Ang-Diom-Vit.pdf · Definizione ! supporta i datagram ! privo di connessione ! messaggi inaffidabili di una lunghezza massima prefissata ! il protocollo

Client(1)

void setSockAddr_in (char IP[IPMAX]) { memset(&infoServer, 0, sizeof(infoServer)); infoServer.sin_family = AF_INET; infoServer.sin_port = htons(PORT); infoServer.sin_addr.s_addr = inet_addr(IP); }

sockAddr_in infoServer è una variabile che è costituita da: Campo1- sin_family famiglia di protocolli Campo2- sin_port: porta sulla quale c’è il servizio Campo3- sin_addr.s_addr: indirizzo IP del server con cui chattare Memset: inizializza i campi della la variabile

Page 9: DATAGRAM SOCKETdisys/CHAT-Socket-Ang-Diom-Vit.pdf · Definizione ! supporta i datagram ! privo di connessione ! messaggi inaffidabili di una lunghezza massima prefissata ! il protocollo

Client(2)

1)if((sock=socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP))<0) ErrorHandler("socket() failed");

1)

printf("\nLa socket del client e' stata creata: %d",sock);

Page 10: DATAGRAM SOCKETdisys/CHAT-Socket-Ang-Diom-Vit.pdf · Definizione ! supporta i datagram ! privo di connessione ! messaggi inaffidabili di una lunghezza massima prefissata ! il protocollo

Live Chat

Si utilizzano ciclicamente recvfrom() e la sendto() per lo scambio dei messaggi

Page 11: DATAGRAM SOCKETdisys/CHAT-Socket-Ang-Diom-Vit.pdf · Definizione ! supporta i datagram ! privo di connessione ! messaggi inaffidabili di una lunghezza massima prefissata ! il protocollo

References

´  Datagram Socket programming http://www.programminglogic.com/sockets-programming-in-c-using-udp-datagrams/

´  Socket Programming http://www.yolinux.com/TUTORIALS/Sockets.html

´  Eclipse Configuration https://www.ics.uci.edu/~pattis/common/handouts/mingweclipse/mingweclipse.html

Page 12: DATAGRAM SOCKETdisys/CHAT-Socket-Ang-Diom-Vit.pdf · Definizione ! supporta i datagram ! privo di connessione ! messaggi inaffidabili di una lunghezza massima prefissata ! il protocollo

Stream Socket

Angelastro Sergio

Diomede Antonio

Viterbo Tommaso

Page 13: DATAGRAM SOCKETdisys/CHAT-Socket-Ang-Diom-Vit.pdf · Definizione ! supporta i datagram ! privo di connessione ! messaggi inaffidabili di una lunghezza massima prefissata ! il protocollo

Definizione

´  Fornisce una connessione

´  sequenziale

´  affidabile

´  full-duplex

´  Il protocollo TCP supporta questo tipo di socket

´  AF_INET (formato indirizzamento)+ SOCK_STREAM determineranno una connessione TCP

Page 14: DATAGRAM SOCKETdisys/CHAT-Socket-Ang-Diom-Vit.pdf · Definizione ! supporta i datagram ! privo di connessione ! messaggi inaffidabili di una lunghezza massima prefissata ! il protocollo

Realizzazione

´  E’ stata realizzata un’applicazione per la comunicazione tra due host che utilizza le streaming socket basata sul protocollo TCP

´  L’applicazione è cross platform

´  Libreria windows: winsock32

´  Libreria Linux: sys/socket, arpa/inet

Page 15: DATAGRAM SOCKETdisys/CHAT-Socket-Ang-Diom-Vit.pdf · Definizione ! supporta i datagram ! privo di connessione ! messaggi inaffidabili di una lunghezza massima prefissata ! il protocollo

Development Tools

´  Ambiente di sviluppo: Eclipse Kepler

´  Linguaggio di programmazione: C

´  Compilatore: MinGW

Page 16: DATAGRAM SOCKETdisys/CHAT-Socket-Ang-Diom-Vit.pdf · Definizione ! supporta i datagram ! privo di connessione ! messaggi inaffidabili di una lunghezza massima prefissata ! il protocollo

Schema Generale Server Client

Socket()

Bind()

Close()

Socket()

Connect()

Close()

Listen()

Accept()

Read()

Read()

Write()

Bloccato fino alla connessione

Esecuzione della richiesta

Read()

Write()

TCP 3 ways handshake

dati

dati

EOF

Creazione di un socket

Assegna un local address al socket

Setta la socket in ascolto Creazione di un

socket

Collegarsi al Server

Itera

tiva

me

nte

(p

roc

ess

o d

i b

ac

kgro

und

) A

cc

etta

una

nuo

va

co

nne

ssio

ne

Invi

a e

ric

eve

me

ssa

gg

i

Invi

a e

ric

eve

m

ess

ag

gi

Chiusura socket

Chiusura socket

Page 17: DATAGRAM SOCKETdisys/CHAT-Socket-Ang-Diom-Vit.pdf · Definizione ! supporta i datagram ! privo di connessione ! messaggi inaffidabili di una lunghezza massima prefissata ! il protocollo

Server(1)

void setSockAddr_in2 char IP[IPMAX]) { memset(&infoServerPers, 0, sizeof(infoServerPers)); infoServerPers.sin_family = PF_INET; infoServerPers.sin_port =htons(PORT); infoServerPers.sin_addr.s_addr = inet_addr(IP); }

sockAddr_in infoServerPers è una variabile che è costituita da: Campo1- sin_family famiglia di indirizzi Campo2- sin_port: porta sulla quale c’è il servizio Campo3- sin_addr.s_addr: proprio IP address Memset: inizializza i campi della la variabile

Page 18: DATAGRAM SOCKETdisys/CHAT-Socket-Ang-Diom-Vit.pdf · Definizione ! supporta i datagram ! privo di connessione ! messaggi inaffidabili di una lunghezza massima prefissata ! il protocollo

Server(2)

1)if((sock=socket(PF_INET,SOCK_STREAM,IPPROTO_TCP))<0) ErrorHandler("socket() failed");

2)if ((bind(sock, (struct sockaddr *)&infoServerPers, sizeof(infoServerPers))) < 0)

ErrorHandler("bind() failed");

3)if (listen (sock, QLEN) < 0) {

ErrorHandler("listen() failed.\n"); closesocket(sock);ClearWinSock();return 0;

}

1) 2)

3)

printf("\nLa socket e' stata creata: %d",sock);

printf("\nBind:La socket e' stata collegata al proprio indirizzo IP.");

printf("\nLa socket ora e' in ascolto.");

Page 19: DATAGRAM SOCKETdisys/CHAT-Socket-Ang-Diom-Vit.pdf · Definizione ! supporta i datagram ! privo di connessione ! messaggi inaffidabili di una lunghezza massima prefissata ! il protocollo

Client(1)

void setSockAddr_in (char IP[IPMAX]) { memset(&infoServer,0,sizeof(infoServer)); infoServer.sin_family = AF_INET; infoServer.sin_port = htons(PORT); infoServer.sin_addr.s_addr=inet_addr(IP); }

sockAddr_in infoServer è una variabile che è costituita da: Campo1- sin_family famiglia di protocolli Campo2- sin_port: porta sulla quale c’è il servizio Campo3- sin_addr.s_addr: indirizzo IP del server con cui chattare Memset: inizializza i campi della la variabile

Page 20: DATAGRAM SOCKETdisys/CHAT-Socket-Ang-Diom-Vit.pdf · Definizione ! supporta i datagram ! privo di connessione ! messaggi inaffidabili di una lunghezza massima prefissata ! il protocollo

Client(2)

1)if((sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))<0) ErrorHandler("socket() failed");

2)if (connect(sock,(struct sockaddr*)&infoServer, sizeof(infoServer))<0) {

ErrorHandler( "Failed to connect.\n" ); closesocket(sock);ClearWinSock();return 0;

}

1) 2)

printf("\nLa socket del client e' stata creata: %d",sock);

printf("\nConnessione al server avvenuta con successo.\n");

Page 21: DATAGRAM SOCKETdisys/CHAT-Socket-Ang-Diom-Vit.pdf · Definizione ! supporta i datagram ! privo di connessione ! messaggi inaffidabili di una lunghezza massima prefissata ! il protocollo

Server(3)

4) if((socketTemp=accept(sock,(struct sockaddr*)&infoClient, &clientLen))<0) {

ErrorHandler("accept() failed .\n"); closesocket(sock);ClearWinSock();return 0; }

printf("\nLa connessione col client %s e' stata accettata",inet_ntoa(infoClient.sin_addr)); printf("\ned stata creata la socket di benvenuto: %d\n",socketTemp);

4)

Page 22: DATAGRAM SOCKETdisys/CHAT-Socket-Ang-Diom-Vit.pdf · Definizione ! supporta i datagram ! privo di connessione ! messaggi inaffidabili di una lunghezza massima prefissata ! il protocollo

Live Chat

Si utilizzano iterativamente recv() e la send () per lo scambio dei messaggi

Page 23: DATAGRAM SOCKETdisys/CHAT-Socket-Ang-Diom-Vit.pdf · Definizione ! supporta i datagram ! privo di connessione ! messaggi inaffidabili di una lunghezza massima prefissata ! il protocollo

References

´  Socket Programming http://www.yolinux.com/TUTORIALS/Sockets.html

´  Eclipse Configuration https://www.ics.uci.edu/~pattis/common/handouts/mingweclipse/mingweclipse.html