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 */