Les sockets - Cyberlearn

Transcription

Les sockets - Cyberlearn
Les sockets
Nabil Abdennadher
Professeur HES
www.nabil-abdennadher.org
[email protected]
1
PLAN
•
•
2
Introduction
Les sockets en C sous Unix, Linux
Introduction
Une socket est une extrémité d'un lien
bidirectionnel entre deux processus.
•
socket
M1
M2
Les sockets sont l’outil de base (de bas niveau)
permettant la communication entre processus
Les sockets sont multiplateformes et multilanguages
•
•
3
Introduction
•
•
L’utilisation des sockets est basée sur le modèle
C/S
Les sockets sont numérotées de 0 et 65535
•
•
De 0 à 1023 : réservées à des services particuliers
Exemple de sockets :
Port 25 : protocole Simple Mail Transfer Protocol
(SMTP).
• Port 110 : protocole Post Office Protocol (POP).
• Port 80 : Protocole http.
•
4
Principe
Communication
Client2
Demande de connexion
Serveur
Demande de connexion
Client1
Communication
Socket (attention une socket n’est pas un port)
5
PLAN
•
•
•
6
Introduction
Les sockets en C sous Unix, Linux
Les sokets en Java
Modèle client/serveur
Création socket
socket
Création socket: socket
Assignation adresse: bind
Demande de connexions
connect
Emission/Réception
read/write
Fermeture connexions
close
7
CLIENT
écoute requêtes: listen
Accepter les requêtes: accept
Emission/Réception: read/write
Fermeture connexions: close
SERVEUR
Coté serveur …
Séquences des opérations …
8
1. Création de sockets : socket
#include <sys/types.h>
#include <sys/socket.h>
Domaine ou famille d’adresses
(AF_INET, AF_UNIX, etc.)
s = socket (af, type, protocole)
int s, af, type, protocole
TCP, UDP, etc.
Type de socket (SOCK_STREAM, etc.)
9
2. Assignation d’adresses : bind
Descripteur de la socket créée par socket
bind (s, name, namelen)
int s, namelen;
struct sockaddr *name;
•
sockaddr
sin_family (short)
• sin_port (u_short)
• sin_addr (Structure)
•
•
10
s_addr
Taille en octets de sockaddr
3. Ecoute des requêtes : listen
Un serveur prépare une socket à l’écoute des
connexions rentrantes
Descripteur de la socket créée par socket
listen (s, taille)
int s, taille;
Taille de la file d’attente
(Requêtes entrantes simultanées)
11
4. Acceptation des demandes de
connexions : accept
ns = accept (s, addr, addrlen)
int s, ns, *addrlen;
struct sockaddr *addr; /* informations du client*/
•
•
•
ns est une socket créée par accept
Les échanges se font sur ns
Les requêtes sont traités de manière :
séquentielle : ns est fermée à chaque itération
• Concurrente : création d’un fils (fork). ns est dans ce cas
fermée par le fils.
•
12
5. Emission de données : write
Descripteur de la socket
write (ns, buffer, length)
Pointeur sur le message.
Longueur du message
13
5 (bis).Réception de données : read
Descripteur de la socket
read (ns, buffer, length)
Pointeur sur le message.
Longueur du message
14
Coté client …
Séquences des opérations …
15
1. Création de sockets : socket
#include <sys/types.h>
#include <sys/socket.h>
Domaine ou famille d’adresses
(AF_INET, AF_UNIX, etc.)
s = socket (af, type, protocole)
int s, af, type, protocole
TCP, UDP, etc.
Type de socket (SOCK_STREAM, etc.)
16
2. Demande de connexion : connect
Etablissement d’une connexion avant tout
échange de données
Descripteur de la socket créée par socket
connect (s, name, namelen)
int s, namelen;
struct sockaddr *name;
Taille en octets de sockaddr
Pointeur sur une structure sockaddr
17
3. Emission de données : write
Descripteur de la socket
write (s, buffer, length)
Pointeur sur le message.
Longueur du message
18
3 (bis).Réception de données : read
Descripteur de la socket
read (s, buffer, length)
Pointeur sur le message.
Longueur du message
19
4. Fermeture d’une connexion : close
close (s)
20
Structure : hostent
struct hostent {
char
*h_name;
char
**h_aliases;
int
h_addrtype;
int
h_length;
char
**h_addr_list;
}
21
/* official name of host */
/* alias list */
/* host address type */
/* length of address */
/* list of addresses */

Documents pareils