Cours. Majeure Informatique Ecole Polytechnique. Applications client/serveur



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

Programmation Internet en Java

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

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

Pour plus de détails concernant le protocole TCP conférez vous à la présentation des protocoles Internet enseignée pendant.

Programmation client-serveur sockets - RPC

Communication par sockets

Communication sous UNIX les sockets

Travaux Pratiques Introduction aux réseaux IP

Cours 6 : Programmation répartie

LA COUCHE TRANSPORT CONTRÔLE LE FLOT DE DONNEES TRANSMISES par la couche Réseau

Programmation Réseau. Anthony Busson IUT Info Lyon 1

Cahier des Charges du Projet Domotique. Choquet Mathieu Masson Jérôme Groupe 6. Domotique. p.1

Dis papa, c est quoi un bus logiciel réparti?

Programmation Réseau SSH et TLS (aka SSL)

Programmation Réseau en C sous Unix

Flux de données Lecture/Ecriture Fichiers

Plan global. Programmation système II. Socket du domaine UNIX. Plan. Socket UNIX, Terminaux, Async IO, Mémoire, ELF.

OS Réseaux et Programmation Système - C5

Projet de programmation (IK3) : TP n 1 Correction

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

RMI le langage Java XII-1 JMF

Remote Method Invocation Les classes implémentant Serializable

Calcul Parallèle. Cours 5 - JAVA RMI

Le modèle client-serveur

Programmer en JAVA. par Tama

Programmation système de commandes en C

Exercice sur les Dockers

Lier Erlang avec d autres langages de programmation

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Gestion distribuée (par sockets) de banque en Java

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

Auto-évaluation Programmation en Java

Corrigé des exercices sur les références

PROGRAMMATION PAR OBJETS

Développement Logiciel

Introduction à HTTP. Chapitre HTTP 0.9

Synchro et Threads Java TM

TP3. Mail. Attention aux fausses manoeuvres lors de ce TP vous pouvez endommager votre mail sur ouindose.

DNS Server RPC Interface buffer overflow. Céline COLLUMEAU Nicolas BODIN

Remote Method Invocation (RMI)

COMPARAISONDESLANGAGESC, C++, JAVA ET

HTTP 1.1. HyperText Transfer Protocol TCP IP ...

LOG4430 : Architecture logicielle et conception avancée

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

Une introduction à Java

STS SE. FreeRTOS. Programmation réseau WIFI. Programmation réseau. Socket Tcp. FlyPort smart Wi-Fi module

Programmation Orientée Objet - Licence TIS CM8/9. Rappel sur la séance précédente. Lancelot Pecquet Lancelot.Pecquet@math.univ-poitiers.

Programmation système en C/C++

Remote Method Invocation en Java (RMI)

Programmation Objet Java Correction

Un ordonnanceur stupide

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Java RMI. Arnaud Labourel Courriel: Université de Provence. 8 mars 2011

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

le minimum pour communiquer par réseau (sans toutefois y comprendre grand chose)

Chapitre 10. Les interfaces Comparable et Comparator 1

Classe ClInfoCGI. Fonctions membres principales. Gestion des erreurs

ACTIVITÉ DE PROGRAMMATION

Windows Vista, Windows Server 2008, IPv6 et les applications. Bernard Ourghanlian Chief Technology & Security Officer Microsoft France

Threads. Threads. USTL routier 1

Principes des Architectures Middleware version 2.0

Package Java.util Classe générique

Programmation Par Objets

Introduction : les processus. Introduction : les threads. Plan

Introduction au langage C

Documentation CAS à destination des éditeurs

3IS - Système d'exploitation linux - Programmation système

Conception de serveurs d'applications ouverts

Cours 14 Les fichiers

Java Licence Professionnelle CISII,

Aspects techniques : guide d interfaçage SSO

Extension SSO Java. Cette note technique décrit la configuration et la mise en œuvre du filtre de custom SSO Java.

Playing with ptrace() for fun and profit

Web Tier : déploiement de servlets

Derrière toi Une machine virtuelle!

Introduction au langage Java

Modèle à composants. Daniel Hagimont. IRIT/ENSEEIHT 2 rue Charles Camichel - BP TOULOUSE CEDEX 7. Remerciements

L3 informatique TP n o 2 : Les applications réseau

Intergiciels pour la répartition CORBA : Common Object Request Broker. Patrice Torguet torguet@irit.fr Université Paul Sabatier

INITIATION AU LANGAGE JAVA

Développement d un logiciel de messagerie instantanée avec Dotnet (version simplifiée)

Modèle client-serveur Plan. Modèle client-serveur. Modèle client-serveur définition. Modèle client-serveur communication par messages.

Le prototype de la fonction main()

Intégration d'un système d'audio-vidéo conférence sur un robot de téléprésence

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Android UIThread, Thread, Handler et AsyncTask

API04 Contribution. Apache Hadoop: Présentation et application dans le domaine des Data Warehouses. Introduction. Architecture


Programme Compte bancaire (code)

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

OpenPaaS Le réseau social d'entreprise

Langage à objets : JAVA (1)

Composants Logiciels. Le modèle de composant de CORBA. Plan

[APPLICATON REPARTIE DE VENTE AUX ENCHERES]

Bases du langage. Historique Applications et applets Éléments de base du langage Classes et objets Les exceptions

Création d un service web avec NetBeans 5.5 et SJAS 9

Plan du cours. Historique du langage Nouveautés de Java 7

Transcription:

Cours Système et Réseaux Majeure Informatique Ecole Polytechnique 7 Applications client/serveur François Bourdoncle Francois.Bourdoncle@ensmp.fr http://www.ensmp.fr/ bourdonc/ 1

Plan Les sockets d Unix BSD Utilisation des sockets Client X-Windows Serveur X-Window Serveur HTTP Datagrammes 2

Adresses réseau (sockets) Domaine AF_UNIX : nom de fichier #include <sys/socket.h> #include <sys/un.h> struct sockaddr_un { short sun_family; char sun_path[104]; ; Domaine AF_INET : adresse IP + numéro de port #include <sys/socket.h> #include <netinet/in.h> #include <netinet/tcp.h> struct in_addr { unsigned long s_addr; ; struct sockaddr_in { short sin_family; u_short sin_port; struct in_addr sin_addr; char sin_zero[8]; ; Adresses de taille variable (passée en paramètre) 3

Les sockets d Unix BSD Apparu sur Unix BSD4.2 (Leffler, etc.) Transparence (local ou distant unifié) Efficacité Compatibilité (programmes existants) socket : crée un descripteur Domaine (AF_UNIX, AF_INET) Type (SOCK_DGRAM, SOCK_STREAM) Protocole ( en général) bind : associe le descripteur à un port (ports réservés au super-utilisateur) listen : taille de la file d attente accept : accepte les connections connect : connecte à un serveur 4

Utilisation des sockets (client) fd = socket(domaine, type, protocole); connect(fd, addresse_serveur, longueur_adresse_serveur); write(fd, commande, longueur_commande); longueur_resultat = read(fd, resultat, max_longueur_resultat); close(fd); 5

Utilisation des sockets (serveur) fds = socket(domaine, type, protocole); bind(fds, adresse_serveur, longueur_adresse_serveur); listen(fds, max_clients); for (;;) { int fdc = accept(fds, adresse_client, longueur_adresse_client); longueur_commande = read(fdc, commande, max_longueur_commande); resultat = Traitement(commande); write(fdc, resultat, longeur_resultat); close(fdc); close(fds); 6

Client X-Windows (DISPLAY=unix :0) #include <sys/socket.h> #include <sys/un.h> Display* XOpenDisplay (int disp) { struct sockaddr_un unaddr; struct sockaddr* addr; int addrlen; Display dpy = (Display*) malloc(sizeof(display));... unaddr.sun_family = AF_UNIX; sprintf(unaddr.sun_path, "/tmp/.x11-unix/x%d", disp); addr = (struct sockaddr*) &unaddr; addrlen = sizeof(unaddr); if ((fd = socket(((int) addr->sa_family, SOCK_STREAM, 0)) < 0) { return -1; if (connect(fd, addr, addrlen) < 0) { int olderrno = errno; (void) close (fd); errno = olderrno; return -1;... dpy->fd = fd; return dpy; 7

Serveur X-Windows (DISPLAY=unix :0) #include <sys/socket.h> #include <sys/un.h> int OpenSocket(int disp) { struct sockaddr_un unaddr; int mask; int fd; unaddr.sun_family = AF_UNIX; mask = umask(0); sprintf(unaddr.sun_path, "/tmp/.x11-unix/x%d", disp); unlink(unaddr.sun_path); if ((fd = socket(af_unix, SOCK_STREAM, 0)) < 0) { return -1; if (bind(fd, (struct sockaddr*) &unaddr, sizeof(unaddr))!= 0) { (void) close(fd); return -1; if (listen(fd, 5)!= 0) { (void) close(fd); return -1; (void) umask(mask); return fd; 8

Serveur HTTP main(int argc, argv[1]) { struct sockaddr_in addrs; int lens = sizeof(addrs); int fds; if (GetHostAddress(NULL, 8080, &addrs) == 0 (fds = socket(af_inet, SOCK_STREAM, 0)) == -1 bind(fds, (struct sockaddr*) &addrs, lens)!= 0 listen(fds, 5)!= 0) { return 1; for (;;) { struct sockaddr_in addrc; int lenc = sizeof(addrc); int fdc = accept(fds, (struct sockaddr*) &addrc, &lenc); if (fdc == -1) { if (errno!= EINTR) { return 1; else { /* Traiter la commande. */... /* Envoyer le resultat.... /* Fermer la connection au client. */ close(fdc); 9

Datagrammes Utilisé quand beaucoup de clients (talk) Pas de connection permanente Échanges épisodiques sendto(... adresse... données...) recvfrom(... adresse... données...) Protocole : UDP (User Datagram Protocol) 10

Datagrammes (serveur) fds = socket(domaine, type, protocole); bind(fds, adresse_serveur, longueur_adresse_serveur); for (;;) { int n = recvfrom(fds, requete, longueur_requete, options, addresse_client, longueur_adresse_client); reponse = Traitement(requete); sendto(fds, reponse, longueur_reponse, options, addresse_client, longueur_adresse_client); close(fds); 11

Datagrammes (client) fd = socket(domaine, type, protocole); bind(fd, adresse_client, longueur_adresse_client); sendto(fd, requete, longueur_requete, options, addresse_serveur, longueur_adresse_serveur); n = recvfrom(fd, reponse, longueur_reponse, options, addresse_serveur, longueur_adresse_serveur); close(fd); 12

Serveur en Java (1/2) import java.io.*; import java.net.*; import java.util.*; class Manager {... static public add(connection c) {... static public remove(connection c) {... public class Server { public static void main(string[] args) throws IOException { ServerSocket socket = new ServerSocket(Integer.parseInt(args[0])); for (;;) { try { Socket client = socket.accept(); Connection c = new Connection(client); Manager.add(c); c.start(); catch (Exception e) { //... 13

Serveur en Java (2/2) class Connection extends Thread { Socket client; public Connection(Socket client) { this.client = client; public void run() { try { String line; InputStream is = client.getinputstream(); OutputStream os = client.getoutputstream(); BufferedReader in = new BufferedReader(new InputStreamReader(is)); PrintWriter out = new PrintWriter(new OutputStreamWriter(os)); out.println("http/1.0 200 "); out.println("content-type: text/plain"); out.println(); while((line = in.readline())!= null && line.length()!= 0) { out.println(line); out.close(); in.close(); catch (Exception e) { //... finally { Manager.remove(this); 14

Travaux dirigés Commande geturl url (commande GET url sur le port 80 du serveur) Execution de processus a distance (rsh) Serveur proxy HTTP (un process par connection) Serveur vis-à-vis du navigateur Client vis-a-vis du serveur HTTP Serveur proxy HTTP multi-thread en Java 15