Applications client/serveur TCP/IP - Sockets Rappels. C.Crochepeyre Applications CS 1



Documents pareils
1. Fonctionnement de l Internet 2. Protocoles applicatifs 3. Programmation réseau

L3 informatique Réseaux : Configuration d une interface réseau

1.Introduction - Modèle en couches - OSI TCP/IP

Introduction. Adresses

NOTIONS DE RESEAUX INFORMATIQUES

Présentation du modèle OSI(Open Systems Interconnection)

TABLE DES MATIERES. I. Objectifs page 2. II. Types de réseaux page 2. III. Transmission page 2. IV. Câbles page 3. V.

II/ Le modèle OSI II.1/ Présentation du modèle OSI(Open Systems Interconnection)

Plan du Travail. 2014/2015 Cours TIC - 1ère année MI 30

Cours des réseaux Informatiques ( )

2. DIFFÉRENTS TYPES DE RÉSEAUX

Plan. Programmation Internet Cours 3. Organismes de standardisation

Communication sous UNIX les sockets

Chapitre VII : Principes des réseaux. Structure des réseaux Types de réseaux La communication Les protocoles de communication

Informatique Générale Les réseaux

Tout sur les Réseaux et Internet

DHCP et NAT. Cyril Rabat Master 2 ASR - Info Architecture des réseaux d entreprise

20/09/11. Réseaux et Protocoles. L3 Informatique UdS. L3 Réseaux et Protocoles. Objectifs du cours. Bibliographie

Administration des ressources informatiques

Travaux Pratiques Introduction aux réseaux IP

Réseaux Locaux. Objectif du module. Plan du Cours #3. Réseaux Informatiques. Acquérir un... Réseaux Informatiques. Savoir.

Les Réseaux Informatiques

Introduction aux Technologies de l Internet

Ch2 La modélisation théorique du réseau : OSI Dernière maj : jeudi 12 juillet 2007

Communication par sockets

Protocoles réseaux. Abréviation de Binary Digit. C'est la plus petite unité d'information (0, 1).

Programmation système de commandes en C

Couche application. La couche application est la plus élevée du modèle de référence.

Cours 6 : Tubes anonymes et nommés

Téléinformatique et télématique. Revenons aux définitions

Computer Networking: A Top Down Approach Featuring the Internet, 2 nd edition. Jim Kurose, Keith Ross Addison-Wesley, July ENPC.

DIFF AVANCÉE. Samy.

Réseaux grande distance

Services Réseaux - Couche Application. TODARO Cédric

Rappels réseaux TCP/IP

Cours Programmation Système

Chapitre 1: Introduction générale

2. MAQUETTAGE DES SOLUTIONS CONSTRUCTIVES. 2.2 Architecture fonctionnelle d un système communicant.

Intérêt du NAT (Network Address Translation) Administration Réseau Niveau routage. Exemple d Intranet. Principe NAT

Algorithmique et langages du Web

Chapitre I. La couche réseau. 1. Couche réseau 1. Historique de l Internet

Services OSI. if G.Beuchot. Services Application Services Présentation - Session Services Transport - Réseaux - Liaison de Données - Physique

Cours n 12. Technologies WAN 2nd partie

Réseaux et protocoles Damien Nouvel

Programmation Réseau. ! UFR Informatique ! Jean-Baptiste.Yunes@univ-paris-diderot.fr

Catalogue & Programme des formations 2015

Algorithmique des Systèmes Répartis Protocoles de Communications

Groupe Eyrolles, 2000, 2004, ISBN :

Chapitre : Les Protocoles

//////////////////////////////////////////////////////////////////// Administration systèmes et réseaux

Rappel: Le routage dans Internet. Contraintes. Environnement et contraintes. La décision dans IP du routage: - Table de routage:

Internets. Informatique de l Internet: le(s) Internet(s) Composantes de l internet R3LR RENATER

N o t i o n s d e b a s e s u r l e s r é s e a u x C h a p i t r e 2

Internet et Programmation!

Configuration automatique

Master d'informatique 1ère année. Réseaux et protocoles. Architecture : les bases

SYSTEME DE GESTION DES ENERGIES EWTS EMBEDDED WIRELESS TELEMETRY SYSTEM

LES RESEAUX INFORMATIQUES

Les Virtual LAN. F. Nolot. Master 1 STIC-Informatique 1

M1101a Cours 4. Réseaux IP, Travail à distance. Département Informatique IUT2, UPMF 2014/2015

Cours de Système : Gestion de Fichiers

Dynamic Host Configuration Protocol

TP 2 Réseaux. Adresses IP, routage et sous-réseaux

Cours de sécurité. Pare-feux ( Firewalls ) Gérard Florin -CNAM - - Laboratoire CEDRIC -

Internet Protocol. «La couche IP du réseau Internet»

UFR de Mathématiques et Informatique Année 2009/2010. Réseaux Locaux TP 04 : ICMP, ARP, IP

Câblage des réseaux WAN.

Notice d installation des cartes 3360 et 3365

Présentation Internet

M1 Informatique, Réseaux Cours 9 : Réseaux pour le multimédia

Exercice sur les Dockers

GESTION DES FICHIERS C/UNIX

Cisco Certified Network Associate

GENERALITES. COURS TCP/IP Niveau 1

Cours CCNA 1. Exercices

Sécurité des réseaux Firewalls

Internet - Outils. Nicolas Delestre. À partir des cours Outils réseaux de Paul Tavernier et Nicolas Prunier

Réseaux - Cours 3. BOOTP et DHCP : Amorçage et configuration automatique. Cyril Pain-Barre. IUT Informatique Aix-en-Provence

18 TCP Les protocoles de domaines d applications

La couche réseau Le protocole X.25

Plan. École Supérieure d Économie Électronique. Plan. Chap 9: Composants et systèmes de sécurité. Rhouma Rhouma. 21 Juillet 2014

Réseaux M2 CCI SIRR. Introduction / Généralités

2. Couche physique (Couche 1 OSI et TCP/IP)

TP : STATION BLANI 2000 SIMULATION DU RESEAU INFORMATIQUE

Introduction à la Programmation Parallèle: MPI

TARMAC.BE TECHNOTE #1

Le réseau Internet.

Communication inter-processus (IPC) : tubes & sockets. exemples en C et en Java. F. Butelle

Protocoles IP (2/2) M. Berthet. Les illustrations sont tirées de l ouvrage de Guy Pujolle, Cours réseaux et Télécom Contributions : S Lohier

Programmation Internet en Java

LA COUCHE PHYSIQUE EST LA COUCHE par laquelle l information est effectivemnt transmise.

Le protocole ARP (Address Resolution Protocol) Résolution d adresses et autoconfiguration. Les protocoles ARP, RARP, TFTP, BOOTP, DHCP

Systèmes et Réseaux (ASR 2) - Notes de cours Cours 14

Programmation système I Les entrées/sorties

ADSL. Étude d une LiveBox. 1. Environnement de la LiveBox TMRIM 2 EME TRIMESTRE LP CHATEAU BLANC CHALETTE/LOING NIVEAU :

Cahier des charges. driver WIFI pour chipset Ralink RT2571W. sur hardware ARM7

Mr. B. Benaissa. Centre universitaire Nâama LOGO

Culture informatique. Cours n 9 : Les réseaux informatiques (suite)

DUT Informatique Module Système S4 C Département Informatique 2009 / Travaux Pratiques n o 5 : Sockets Stream

Ethernet Industriel Réseaux Ethway Coupleur Ethernet sur Automates Programmables. Plan. Contexte

Transcription:

Applications client/serveur TCP/IP - Sockets Rappels C.Crochepeyre Applications CS 1

PLAN Modèle client/serveur Modèle ISO et protocole TCP/IP Comment ça marche? La programmation: les sockets Exemples client/serveur: UDP et TCP C.Crochepeyre Applications CS 2

Modèle client/serveur : C/S L application informatique est éclatée entre La partie application cliente : processus «client» La partie application serveur : processus «serveur» Le client fournit au serveur les données pour effectuer des traitements: demande de service Le serveur rend le service et retourne au client les résultats client serveur C.Crochepeyre Applications CS 3

Pourquoi? Le serveur peut être sollicité par plusieurs clients pour le même service Chaque application peut être distante : réseau Clients et serveur peuvent s exécuter sur des machines différentes. Les puissances de calcul peuvent être mieux réparties Les applications clientes peuvent être différentes M2 M1 M3 clients serveur client C.Crochepeyre Applications CS 4

Côté client Le client est à l initiative de la demande Il doit s adresser au bon serveur Lui fournir toutes les données pour effectuer le service Attendre les résultats Assurer la présentation M3 M1 M2 client serveur C.Crochepeyre Applications CS 5

Côté serveur Le serveur doit être actif et attendre une demande A la demande d un client, il doit récupérer les données pour effectuer le traitement Il doit renvoyer au client concerné les résultats non formatés M3 client M1 M2 serveur C.Crochepeyre Applications CS 6

Serveur itératif Le serveur ne traite qu une demande à la fois clients serveur Serveur parallèle Le serveur traite plusieurs demandes simultanément clients serveur C.Crochepeyre Applications CS 7

Les échanges par réseaux Communication entre équipements LAN: Local Area Network (10 mètres à quelques km) MAN: Metropolitan Network (de 10 à 100 km) WAN: Wide Area Network (100km au monde entier) Architectures: étoile, anneau, maillage, arbre Canaux: bus, satellite, Débits: bits/s, Kbits/s, Mbits/s, Gbits/s.. Protocoles entre équipements: format, ordre des échanges (envois et réceptions), actions associées Echanges sur des réseaux hétérogènes: Inter-Net C.Crochepeyre Applications CS 8

Modèle OSI ISO International Organisation for Standardization Le modèle OSI Open System Interconnection Architecture en 7 couches Principes: Chaque système possède un ensemble de couches La communication entre 2 applications de même couche s effectue selon un protocole propre à cette couche Chaque couche se réfère aux services fournis par les couches inférieures Lors d un dialogue entre 2 couches de même niveau, les couches inférieures sont transparentes C.Crochepeyre Applications CS 9

Les couches basses: Physique: transmission binaire Liaison: transmission de trames Réseau: acheminement des paquets, routage, interconnexion des sousréseaux Les couches hautes Transport: transport de bout en bout des messages, découpage et réassemblage (paquets), gestion de la connexion Session: dialogue entre tâches distantes synchronisation Présentation: présentation des données échangées entre applications Application: accès aux services par l utilisateur Protocole simplifié: TCP/IP C.Crochepeyre Applications CS 10

Le protocole TCP/IP Des solutions d échange de données entre deux processus distants: fichiers, ftp, applications Le protocole de communication TCP/IP TCP utilisé avec IP ou UDP avec IP Les couches Network Access (couches OSI 1 et 2): ethernet ou autre Internet (couche OSI 3): IP Host/Host (couche OSI 4): TCP ou UDP Processus et applications (couches OSI 5,6 et 7) :tftp, telnet, smtp, http C.Crochepeyre Applications CS 11

Le réseau Ethernet Réseau local Norme IEEE 802.3 technique d accès CSMA/CD Topologie: segment de bus Vitesse de transmission de 10Mbits/s à 1000 Mbits/s Supports: câble coaxial, paires torsadées, fibre optique Avantages: simplicité, faible coût, débit élevé, connexion/déconnexion, Inconvénients: durée de transmission bornée, absence de récupération d erreurs au niveau liaison, pas de mécanisme de priorité C.Crochepeyre Applications CS 12

Le protocole IP Interconnexion de machines situées sur des réseaux différents. Assure: L adressage par des adresses Internet Le routage La fragmentation et réassemblage des paquets Le contrôle des erreurs Le contrôle des flux Le contrôle de la durée de vie du datagramme Deux services: send et deliver Avantage: hétérogénéité des sous réseaux que doivent traverser les messages des deux machines Met en communication deux machines via des adresses Internet C.Crochepeyre Applications CS 13

UDP et TCP Deux services transport, couche supérieure à IP UDP: communication légère sans exigence de fiabilité ni de temps de réponse Transmission de messages Possibilité de perte, duplication, déséquencement des messages: contrôle par la couche supérieure application Exemple TFTP (transfert de fichiers) TCP: communication fiable avec connexion circuit virtuel entre deux processus Pas de message mais un flot d octets fragmentés en segments Fiabilité avec numérotation des octets, acquittement, réordonnancement: contrôle de flux Exemple SMTP (mail) Communication entre deux processus via des n de port C.Crochepeyre Applications CS 14

Adresses IP Une adresse IP est unique pour chaque machine Attribuée par l AFNIC centre d'information et de gestion des noms de domaine internet (France et île de la Réunion). Adresse de 32 bits découpés selon l utilité Adresse réseau Adresse de la machine Classes réseaux: A, B, C, D, E Codage adresse IP: Décimal pointé 163.173.212.27 Symbolique lion.cnam.fr machine.sous-domaine.domaine DNS Domain Name System Table de correspondances entre un nom symbolique et une adresse pointée: 163.173.212.27 lion.cnam.fr Hiérarchie des serveurs C.Crochepeyre Applications CS 15

Classe A: 0.0.0.0 à 127.255.255.255 0 réseau 1 7 @locale 24 Classe B: 128.0.0.0 à 191.255.255.255 réseau @locale 1 0 1 1 14 18 Classe C: 192.0.0.0 à 223.255.255.255 réseau @locale 1 1 0 1 1 1 21 8 Classe D: 224.0.0.0 à 239.255.255.255 multicast 1 1 1 1 1 1 1 1 28 C.Crochepeyre Applications CS 16

Adresse réseau Identificateur réseau suivi de zéro 163.173.0.0 : réseau 163.173 de classe B Diffusion au réseau (broadcast) Identificateur du réseau suivi de un 163.173.255.255 diffusion au réseau 163.173 de classe B Adresse machine Identificateur réseau et machine 163.173.224.27: machine 224.27 du réseau 163.173 de classe B 163.x.x.x: localhost désigne la machine locale 0.0.0.0 utilisé si adresse inconnue de la machine Adresse sous réseau Utilisation des adresses machines comme adresse sous réseau Masque de réseau: 255.255.0.0 pour la classe B Masque de sous réseau: 255.255.255.0 pour le sous réseau Si @IPdest & masque = @de la machine; alors envoi à la machine - sinon routeur (@IPdest & masque, @IPmachine) C.Crochepeyre Applications CS 17

Adresse Ethernet Chaque machine = adresse éthernet sur 48 bits Adresse physique Correspondance entre @IP et @Ethernet (@MAC) ARP Adress Resolution Protocol: @IP -> @Ethernet -> machine M1 envoie un message ARP avec son @IPM1et @EthernetM1 à toutes les machines, si M2 reconnaît son @IPM2 M2 répond et renvoie @EthernetM2 M1 met à jour sa table ARP avec les deux adresses de M2 M2 met à jour sa table ARP avec les deux adresses de M1 RARP Reverse ARP: Une station recherche son @IP dans une table inversée de correspondance machine -> @Ethernet -> @IP C.Crochepeyre Applications CS 18

Les ports: Comment ça marche? Côté serveur: chaque service (application) ouvre un port de communication identifié par un n Côté client : chaque client (application) ouvre un port de communication identifié par n La communication s établit entre deux applications identifiées (ports) sur deux machines identifiées (@IP). Envoi de paquets : UDP: le message envoyé est découpée en datagrammes TCP: le flot d octets est bufferisé en segments Les couches UDP et TCP UDP et TCP ajoutent aux données les n ports: port_dest, port_exp C.Crochepeyre Applications CS 19

Couche IP: IP ajoute, entre autres, aux données transmises par UDP ou TCP les adresses IP des machines (destinataire et expéditeur) @dest, @exp, données. @dest, @exp, données. Les paquets sont acheminés via les réseaux jusqu à la machine destinataire @dest Les données sont transmises à l application identifiée par son n de port et récupère l @IP de l expéditeur C.Crochepeyre Applications CS 20

Le client interroge le serveur Serveur Client Port PS «Pourquoi?» UDP PS PC «Pourquoi?» IP @S @C PS PC «Pourquoi?» Port PC «Pourquoi?» UDP PS PC «Pourquoi?» IP @S @C PS PC «Pourquoi?» @S @C C.Crochepeyre Applications CS 21

Programmation: les sockets Programmation des points terminaux de communication entre deux processus Une socket à chaque extrémité du canal de communication Point de sortie pour l émission de données Point d entrée pour la réception de données Utilisation essentielle pour des processus distants. Pour les processus locaux, d autres outils (IPCs, PIPE) A chaque socket sont associés: descripteur, domaine, nom... Le SGF est impliqué dans la gestion des sockets C.Crochepeyre Applications CS 22

Descripteur Référence attribuée dans le processus créateur utilisation des descripteurs de fichiers: Entrée dans la table des descripteurs du processus avec pointeur vers une structure interne de type socket Redirection possible d un fichier standard vers une socket fork() : le fils hérite des descripteurs donc des sockets Lecture et écriture en spécifiant le descripteur Table des fichiers Table des descripteurs du processus A socket i-noeud Files Connexions en attentes Connexions actives Data à émettre Data à recevoir Structure socket C.Crochepeyre Applications CS 23

Domaine Deux domaines possibles Internet pour une communication distante Unix pour une communication interne (si besoin) Un format d adresses de la socket selon le domaine Des protocoles associés au domaine Nom Référence pour le processus et les autres processus Une structure interne avec: Pour une communication locale: nom de fichier Pour une communication distante: une adresse transport adresse réseau + n de port Tout processus, non fils, peut hériter de la socket à condition que le descripteur soit «attaché» à cette référence Similitude avec un fichier La référence d une socket est dans un i-nœud particulier C.Crochepeyre Applications CS 24

Socket distante Côtéclient Un client doit connaître la référence de la socket serveur afin de l appeler La référence de la socket cliente peut être laissée à la charge du système Côté serveur La référence de la socket serveur doit être connue du client La référence de la socket cliente est transmise automatiquement au serveur lors de la demande du client. Le serveur peut ainsi lui répondre. C.Crochepeyre Applications CS 25

Le type Sémantique associée à la communication SOCK_DGRAM pour mode datagramme : des messages SOCK_STREAM pour mode connecté : un flot de données Similitudes avec le courrier : l expéditeur écrit au destinataire avec son adresse dans le courrier, pour la réponse le téléphone : l appelant compose le n, l appelé décroche et une ligne de communication est établie entre les deux n. Ils raccrochent, la ligne est libérée. Deux protocoles, deux modes de communication Pour assurer la sémantique (type) UDP pour SOCK_DGRAM TCP pour SOCK_STREAM C.Crochepeyre Applications CS 26

Mode datagramme: le protocole UDP Côté Client création d une socket (attachement) socket()/bind() Côté Serveur création et attachement d une socket socket() et bind() construction adresse du serveur envoi message au serveur sendto() à une @serveur connue attente message du client réception recvfrom() @client attente réponse du serveur réception recvfrom() envoi réponse au client sendto() C.Crochepeyre Applications CS 27

Mode connecté: le protocole TCP Côté Client création d une socket (attachement) socket()/bind() construction adresse du serveur demande connexion connect() à une @serveur connue Côté Serveur création et attachement d une socket d écoute socket() et bind() Ouverture du service listen() Attente de demande de connexion client accept() @client nouvelle socket de service échanges write() read() Échanges socket de service read() write() C.Crochepeyre Applications CS 28

Création d une socket Les primitives de création sock = socket(domaine, type, protocole) int sock; n du descripteur socket créée int domaine; AF_INET ou AF_UNIX (AF_LOCAL..) int type; SOCK_DGRAM ou SOCK_STREAM int protocole; O protocole par défaut Implication des différentes tables du SGF Unix Suppression au close() de la socket Fonction assimilable à la fonction pipe() mais un seul n de descripteur, pas de nom de fichier Les processus fils héritent des descripteurs du père donc du descripteur de la socket C.Crochepeyre Applications CS 29

Suppression d une socket close(sock) int sock; descripteur socket à la fermeture du dernier descripteur de la socket Cas STOCK_STREAM: il peut arriver que la suppression soit bloquante car le tampon d émission a encore des caractères non transmis. C.Crochepeyre Applications CS 30

Attachement d une adresse à une socket: nom de la socket Le descripteur doit être associé à un nom de fichier si domaine Unix ou un n de port et une @IP si domaine Internet bind(sock, adresse, lgstruct) int sock; descripteur socket int lgstruct; longueur de la structure selon le domaine Deux structures différentes : socket interne et socket distante adresse domaine UNIX struct sockaddr_un {short sun_family; char sun_path [109];} nom fichier adresse domaine INTERNET struct sockaddr_in {short sin_family; u_short sin_port; @port struct in_addr sin_addr; @IP char sin_zero [8];} C.Crochepeyre Applications CS 31

Après le bind() le descripteur pointe sur la structure système associée à la socket avec le nom du fichier de type S (socket) spécifié dans sun_path si Unix avec le n du port et l adresse IP si Internet Possibilités sin_addr = INADDR_ANY (une des adresses de la machine) = ou gethostname() sin_port = 0 un port libre alloué par le système = n port choisi = getservbyname(). C.Crochepeyre Applications CS 32

Exemples socket Unix struct sockaddr_un sockux;.. sockux.sun_family = AF_UNIX; strcpy(sockux.sun_path, «sockunix.test») bind(sock,&sockux,strlen(sockux.sun_path)+2) socket INTERNET struct sockaddr_in sockit;..; sockit.sin_family = AF_INET; sockit.sin_port = n du port associé à la socket; (format réseau) sockit.sin_addr = adresse de la machine; (format réseau) bind(sock, &sockit,sizeof(sockit)); C.Crochepeyre Applications CS 33

Des fonctions pour récupérer les adresses machines gethostname() récupération du nom de la machine dans une chaîne de caractères gethostbyname() récupération du nom de la machine dans une structure hostent Des fonctions pour récupérer les n ports des services Si le service est connu getservbyname() getservent() getservbyport() permettent de récupérer les caractéristiques des services dans un structure «servent» Service quelconque utilisateur getsockname() récupération du n du port attaché à une socket en fournissant le descripteur C.Crochepeyre Applications CS 34

Conversion des formats des données Chaque machine code ses données selon un format local, les échanges entre machines impliquent donc des conversions du format local au format réseau et du format réseau au format local L adresse IP et n port doivent être au format réseau dans la structure système avant envoi L adresse IP et n port reçus dans la structure doivent être reconvertis au format local avant utilisation (ex: pour un printf de l adresse de la machine) Primitives conversion des données ntohl() adresse réseau entier long en adresse locale ntohs() adresse réseau entier court en adresse locale ntonl() adresse locale entier long en adresse réseau ntons() adresse locale entier court en adresse réseau C.Crochepeyre Applications CS 35

Les primitives d échanges mode UDP Après création de la socket et attachement Emission nc = sendto(sock,msg,option,p_dest,lgdest) int nc; nb de car envoyés int sock; n descripteur socket locale char *msg; adresse message à envoyer Int lg; long du message à envoyer Int option; 0 pour SOCK_DGRAM struct sockaddr *p_dest; struct socket avec l adresse du destinataire int lgdest; long structure socket sendmsg() envoi de plusieurs messages C.Crochepeyre Applications CS 36

Réception nc = recvfrom(sock,msg,lg,option,p_exp,lgexp) int nc; nb de car reçus int sock; n descripteur socket char *msg; adresse récupération du message Int lg; taille espace réception Int option; 0 ou MSG_PEEK struct sockaddr *p_exp; struct récup l adresse de l expéditeur int lgdest; long structure de l expéditeur recvmsg() réception de plusieurs messages C.Crochepeyre Applications CS 37

Primitives en mode TCP Après création de la socket et attachement Etablissement du circuit virtuel côté client demande de connexion connect(sock,p_adr,lg_adr) Client: int sock; struct sockaddr *p_adr; int lg_adr; Serveur int socke int nb; int socks; struct sockaddr *p_adr; Int lg_adr; côté serveur préparation du service listen(soke,nb) traitement de la connexion reçue socks=accept(socke, p_adr,p_lg_adr) descripteur socket cliente structure contenant @machineserveur et n port long de la structure descripteur socket écoute serveur nombre maxi de connexions pendantes descripteur socket de service qui va communiquer avec le client structure récupérant @machineclient et n port long structure C.Crochepeyre Applications CS 38

Emission nc = write(socks,msg,lg) int socks descripteur socket de service char *msg adresse du message à envoyer int lg long du message int nc nb de car réellement émis Ou nc = send(socks,msg,lg,option) option 0 idem write MSG_OOB caractère urgent (out-of-band) MSG_PEEK conservation message C.Crochepeyre Applications CS 39

Réception Nc = read(socks, msg, lg, option) int socks descripteur socket de service char *msg adresse du message reçu int lg long du message int nc nb de car réellement lus Ou Nc = recv(socks, msg, lg, option) C.Crochepeyre Applications CS 40

Serveur parallèle: TCP Pour éviter que le serveur prenne en charge qu un seul service à la fois, il crée un processus fils à chaque demande client Le processus fils hérite automatiquement des descripteurs ouverts par le père (socke et socks) dans sa propre table des descripteurs ainsi que des données associées. Chaque fils remplace son code par le code du service à exécuter exec(service demandé) avec passage en paramètres : socke et socks Le fils communique alors directement avec son client Le processus serveur est déchargé de ce service et peut accepter une autre demande. Ne pas oublier de fermer La socket d écoute dans le processus fils (non utile) La socket de service dans le processus père (non utile) C.Crochepeyre Applications CS 41

Serveur parallèle clients serveur C.Crochepeyre Applications CS 42

Serveur parallèle: TCP Côté Client création d une socket (attachement) socket()/bind() construction adresse du serveur demande connexion connect() à une @serveur connue Côté Serveur création et attachement d une socket d écoute socket() et bind() Ouverture du service listen() Attente de demande de connexion client accept() @client nouvelle socket de service création d un processus fils fork() exec() échanges write() read() Échanges socket de service read() write() C.Crochepeyre Applications CS 43

Client UDP #include #include #include #include #include #include extern Exemple simple UDP /**********************************************/ /* utilisation des sockets mode datagramme */ /* client UDP */ /* Le client envoie une suite de car au serveur */ /*********************************************/ <stdio.h> <errno.h> <sys/types.h> <sys/socket.h> <netinet/in.h> <netdb.h> errno; main(argc,argv) char **argv; { struct hostent *h; struct sockaddr_in sin; char buf[10]; int sock; On passe en argument: n port du service et l @IP du serveur Structure pour récupération des propriétés d une machine Structure socket on y place l adresse du serveur Zone de message descripteur socket C.Crochepeyre Applications CS 44

if(argc!=3) { fprintf(stderr,"usage: %s remotehost remoteport \n",argv[0]); exit(0); } if((sock = socket(af_inet,sock_dgram,ipproto_udp)) < 0) { perror("socket"); exit(1); } if(!(h=gethostbyname(argv[1]))) { perror(argv[1]); exit(2); } création socket cliente UDP récupération @machine serveur bzero(&sin,sizeof(sin)); sin.sin_family = AF_INET; bcopy(h->h_addr,&sin.sin_addr,h->h_length); sin.sin_port = htons(atoi(argv[2])); maj struct socket cliente n port serveur C.Crochepeyre Applications CS 45

if(sendto(sock,"abc",3,0,&sin, sizeof(sin))!=3) { fprintf(stderr,"erreur ecriture \n"); exit(1); } if(sendto(sock,"defgh",5, 0,&sin, sizeof(sin))!=5) { fprintf(stderr,"erreur ecriture \n"); exit(1); } if(sendto(sock,"ij",2, 0,&sin, sizeof(sin))!=2) { fprintf(stderr,"erreur ecriture \n"); exit(1); } if(sendto(sock,"klmnopqrs",9,0,&sin, sizeof(sin))!=9) { fprintf(stderr,"erreur ecriture \n"); exit(1); } sleep(2); if(sendto(sock,"tuv",3, 0,&sin, sizeof(sin))!=3) { fprintf(stderr,"erreur ecriture \n"); exit(1); } if(sendto(sock,"wxyz",4, 0,&sin, sizeof(sin))!=4){ fprintf(stderr,"erreur ecriture \n"); exit(1); } close (sock);} C.Crochepeyre Applications CS 46

Serveur UDP /************************************************/ /* utilisation de socket sur le reseau mode datagramme */ /* partie serveur */ /* Le serveur reçoit du client les caractères */ /************************************************/ #include <unistd.h> #include<stdio.h> #include <fcntl.h> #include <sys/socket.h> #include <sys/time.h> #include <netinet/in.h> #include <netdb.h> struct sockaddr_in sin = {AF_INET}; Struct pour la socket serveur main() { int len, sock; char ligne[10]; int n; struct sockaddr_in adr; Struct pour récupérer l adresse client if((sock = socket(af_inet,sock_dgram,0)) < 0) {perror("socket"); exit(1); } C.Crochepeyre Applications CS 47

if(bind(sock, &sin, sizeof(sin)) < 0) attachement de la socket serveur {perror("bind"); exit(2); } len = sizeof(sin); if(getsockname(sock, &sin, &len) < 0) récupération n port attribué à la socket serveur {perror("getsockname"); exit(3); } printf("server bound to port %u 0x%x \n",ntohs(sin.sin_port),sin.sin_port); affiche le n port socket serveur for(;;) {len = sizeof(adr); n = recvfrom(sock,ligne,10,0,&adr, &len); attend les carac du client if (n == -1) {perror (" pb socket lecture"); exit(); } ligne[n] ='\0'; printf("la chaine lue par le serveur est %s\n",ligne); affichage } } C.Crochepeyre Applications CS 48

Exemple simple TCP Client TCP /*************************************/ /* client.c tcp_client */ /* socket mode connecte */ /* le client attend un message du serveur */ /* il n envoie rien au serveur */ /*************************************/ #include #include #include #include #include #include extern <stdio.h> <errno.h> <sys/types.h> <sys/socket.h> <netinet/in.h> <netdb.h> errno; main(argc,argv) char **argv; { struct hostent *h; struct sockaddr_in sin; char buf[2048]; int sock; arguments: @port serveur et @machine serveur communiqués par le printf() du serveur Struct conversion adresses Struct socket cliente dans laquelle on place l adresse du serveur Buffer message du serveur Descripteur socket cliente C.Crochepeyre Applications CS 49

if(argc!=3) {fprintf(stderr,"usage: %s remotehost remoteport \n",argv[0]); @du port serveur exit(0); } if((sock = socket(af_inet,sock_stream,ipproto_tcp)) < 0) création socket cliente TCP {perror("socket"); exit(1); } if(!(h=gethostbyname(argv[1]))) @machine serveur {perror(argv[1]); exit(2); } bzero(&sin,sizeof(sin)); maj struct socket sin.sin_family = AF_INET; bcopy(h->h_addr,&sin.sin_addr,h->h_length); @machine serveur sin.sin_port = htons(atoi(argv[2])); @port serveur if(connect(sock,&sin,sizeof(sin)) < 0) {perror("connect"); } printf ("Attente Message Serveur \n"); read (sock, buf, 18); printf ("Message Recu : %s \n", buf); close (sock); } demande connexion au serveur attente d un message du serveur C.Crochepeyre Applications CS 50

Serveur TCP /*************************************/ /* server.c tcp_serveur */ /* socket mode connecte */ /* le serveur envoie un message au client */ /* il n attend rien du client */ /*************************************/ #include <stdio.h> #include <signal.h> #include <sys/types.h> #include <sys/socket.h> #include <sys/time.h> #include <netinet/in.h> #include <netdb.h> struct sockaddr_in sin = {AF_INET}; structure socket serveur main(argc,argv) char **argv; { int namelen, newsock, sock; if((sock = socket(af_inet,sock_stream,ipproto_tcp)) < 0) {perror("socket"); exit(1); } création socket serveur TCP C.Crochepeyre Applications CS 51

if(bind(sock, &sin, sizeof(sin)) < 0) attachement de la socket serveur {perror("bind"); exit(2); } namelen = sizeof(sin); if(getsockname(sock, &sin, &namelen) < 0) récupération n port socket serveur {perror("getsockname"); exit(3); } printf("server bound to port %u 0x%x \n",ntohs(sin.sin_port),sin.sin_port); affichage n port if(listen(sock,5) < 0) {perror("listen"); exit(4); } for (;;) {if((newsock = accept(sock,&sin,&namelen)) < 0) {perror("accept"); exit(5); } write (newsock, "bonjour du Serveur", 18); ouverture du service, 5 connexions pendantes attente de connexion cliente, acceptation et création de la socket de service et récupération de l adresse du client dans &sin le serveur envoie son bonjour au client close(newsock); } } C.Crochepeyre Applications CS 52