Académique Documents
Professionnel Documents
Culture Documents
Les Sockets
Ahmed ZELLOU
Sup-MTI, 2022-2023.
PR-Sockets
Plan
n Notions générales
n Présentation sockets
n Caractéristiques d’une socket
n Primitives d’une socket
n Sockets en mode connecté
n Envoyer et recevoir les données
n Sockets en mode non connecté
n Processus père et Processus fils.
2
@ A.ZELLOU
PR-Sockets
Notions générales
n Programmation réseau
n Permettre à des processus de communiquer ( échanger des
données) avec d’autres processus se trouvant sur des ordinateurs
locaux ou distants (connectés par un réseau).
3
@ A.ZELLOU
PR-Sockets
Notions générales
n Protocole
n Un protocole est un ensemble d’accords sur:
n début d’un message
n la représentation des bits
n détection de la fin d’un message
n acheminement des message
n représentation des nombres, des caractères
n etc …
4
@ A.ZELLOU
PR-Sockets
Notions générales
n Modèle client/serveur
n La majorité des applications réseau modernes se fondent sur le
modèle client/serveur.
n Serveur :
n Un programme qui s’exécute sur un une machine et qui est
capable d’offrir un service.
n Le serveur reçoit une requête à travers le réseau, effectue le
traitement nécessaire et retourne le résultat de la requête.
5
@ A.ZELLOU
PR-Sockets
Notions générales
n Ports
n Plusieurs applications réseau peuvent tourner sur la même
machine.
n Le numéro de port permet d’identifier l’application avec laquelle
on souhaite communiquer.
6
@ A.ZELLOU
PR-Sockets
Sockets
n Présentation
n Une socket (prise) est un point de communication par lequel un
processus peut émettre ou recevoir des informations.
7
@ A.ZELLOU
PR-Sockets
Sockets
n Principe de base
1. Chaque processus crée une socket,
2. Chaque socket sera associée à un port de la machine sur laquelle
se déroule le processus qui l’a crée,
3. Les deux sockets seront explicitement connectées si on utilise un
protocole en mode connecté,
4. Chaque processus lit et/ou écrit dans sa socket,
5. Les données sont envoyées d’une socket à une autre à travers le
réseau,
6. Une fois terminé, chaque processus ferme sa socket.
8
@ A.ZELLOU
PR-Sockets
Sockets
n Analogie
n Une socket peut être vue comme une boîte aux lettres ou un
poste téléphonique.
Ports
Réseau
Serveur Client
9
@ A.ZELLOU
PR-Sockets
Caractéristiques d’une socket
n Domaine 1/3
10
@ A.ZELLOU
PR-Sockets
Caractéristiques d’une socket
n Type 2/3
11
@ A.ZELLOU
PR-Sockets
Caractéristiques d’une socket
n Protocole 3/3
12
@ A.ZELLOU
PR-Sockets
Primitives d’une socket
n Création d’une socket
#include <sys/socket.h>
int socket (int domaine,
int type,
int protocole)
int sd;
sd=socket(AF_INET,
SOCK_STREAM,
0);
if (sd<0)
printf("erreur de création\n" );
n Retourne -1 en cas d’erreur
14
@ A.ZELLOU
PR-Sockets
Primitives d’une socket
n Adresse d’une socket
n La structure de l’adresse est la suivante :
struct sockaddr_in {
short sin_family; /* AF_INET*/
u_short sin_port; /* N° port*/
struct in_addr sin_addr; /* @IP*/
char sin_zero[8]; /* non utilisé*/
}
struct in_addr {
u_long s_addr; /* Pour l’adresse IP*/
}
15
@ A.ZELLOU
PR-Sockets
Primitives d’une socket
n Adresse d’une socket
n La structure de l’adresse est la suivante :
n INADDR_ANY
n Une adresse IP libre, utilisée quand on ne connait pas l'adresse de la
machine.
n Elle permet de recevoir mes paquets adressés à toutes les interfaces.
16
@ A.ZELLOU
PR-Sockets
Primitives d’une socket
n Attachement d’une socket
#include <sys/socket.h>
int bind(int sd,
struct sockaddr_in *p_adresse,
int lg_adresse)
n sd : Descripteur de la socketDomaine:
n *p_adresse: pointeur sur l’adresse
n lg_adresse: Longueur de l’adresse
17
@ A.ZELLOU
PR-Sockets
Primitives d’une socket
n Attachement d’une socket
int sd;
struct sockaddr_in adresse;
adresse.sin_family = AF_INET;
adresse.sin_port = 1230;
adresse.sin_addr.s_addr = INADDR_ANY;
18bind (sd, (struct sockaddr_in *) &adresse, sizeof(adresse));
@ A.ZELLOU
PR-Sockets
Sockets en mode connecté
SERVEUR CLIENT
socket() socket()
bind() Construction de
l’adresse du serveur
listen()
connect()
accept()
read()/recv() write()/send()
Boucle
write()/send() read()/recv()
close_connexion() close()
19
close_socket() @ A.ZELLOU
PR-Sockets
Merci
20
@ A.ZELLOU