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



Documents pareils
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

Synchro et Threads Java TM

Programmation Internet en Java

Cours 6 : Programmation répartie

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

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

Le modèle client-serveur

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

Flux de données Lecture/Ecriture Fichiers

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

Introduction : les processus. Introduction : les threads. Plan

Développement Logiciel

Threads. Threads. USTL routier 1

INITIATION AU LANGAGE JAVA

Programmer en JAVA. par Tama

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

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

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

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

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Un ordonnanceur stupide

Info0604 Programmation multi-threadée. Cours 5. Programmation multi-threadée en Java

RMI le langage Java XII-1 JMF

Projet de programmation (IK3) : TP n 1 Correction

Remote Method Invocation (RMI)

Remote Method Invocation Les classes implémentant Serializable

Cours 1: Java et les objets

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

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

J2SE Threads, 1ère partie Principe Cycle de vie Création Synchronisation

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

Exercices INF5171 : série #3 (Automne 2012)

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

Le protocole TCP. Services de TCP

Java Licence Professionnelle CISII,

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

Corrigé des exercices sur les références

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

Communication par sockets

Programmation système de commandes en C

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

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

Programmation Réseau SSH et TLS (aka SSL)

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

Programmation Par Objets

TD3: tableaux avancées, première classe et chaînes

Java Licence Professionnelle CISII,

Auto-évaluation Programmation en Java

Introduction aux Systèmes et aux Réseaux

Calcul Parallèle. Cours 5 - JAVA RMI

as Architecture des Systèmes d Information

Programmation système I Les entrées/sorties

INF 321 : mémento de la syntaxe de Java

Package Java.util Classe générique

M1 MIAGE - Réseau TP1

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

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

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

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Une introduction à Java

Tp 1 correction. Structures de données (IF2)

Projet gestion d'objets dupliqués

Traitement de données

Introduction au langage Java

4. Outils pour la synchronisation F. Boyer, Laboratoire Lig

TP1 : Initiation à Java et Eclipse

Programmation Objet Java Correction

Certificat Big Data - Master MAthématiques

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

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

Principes des Architectures Middleware version 2.0

Langage Java. Classe de première SI

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

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

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Desktop Intégration. Rémi Forax

LOG4430 : Architecture logicielle et conception avancée

École Polytechnique de Montréal. Département de Génie Informatique et Génie Logiciel. Cours INF2610. Contrôle périodique.

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

18 TCP Les protocoles de domaines d applications

Cours 6 : Tubes anonymes et nommés

Programmation en Java IUT GEII (MC-II1) 1

UDP/TCP - Protocoles transport

OS Réseaux et Programmation Système - C5

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Chapitre 10. Les interfaces Comparable et Comparator 1

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Cours 14 Les fichiers

PROGRAMMATION PAR OBJETS

Exercices sur les interfaces

Solutions du chapitre 4

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Administration UNIX. Le réseau

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

Notion de thread (1/2)

Entrées / Sorties. Entrées / Sorties. Entrées/Sorties. System.out. Fonctionnement par flots (stream) Karima Boudaoud IUT- R&T. Terrain connu.

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

Processus! programme. DIMA, Systèmes Centralisés (Ph. Mauran) " Processus = suite d'actions = suite d'états obtenus = trace

Transcription:

F. Butelle, E. Viennet, Système GTR2 IUT Paris 3 Communication inter-processus (IPC) : tubes & sockets exemples en C et en Java F. Butelle

F. Butelle, E. Viennet, Système GTR2 IUT Paris 3 Java : implémentation des Evenements public class Evenement { private Boolean Etat; // etat de l'evenement public Evenement() { Etat = Boolean.FALSE; public synchronized void set() { Etat = Boolean.TRUE; notifyall(); // debloque les threads qui attendent cet evenement: public synchronized void reset() { Etat = Boolean.FALSE; public synchronized void attente() { if(etat==boolean.false) { try { wait(); // bloque jusqu'a un notify() catch(interruptedexception e) {; // fin attente // fin classe

F. Butelle, E. Viennet, Système GTR2 IUT Paris 3 Communications entre processus Processus utilisateur Processus utilisateur Processus utilisateur Processus utilisateur Noyau du SE Noyau SE Noyau SE Communications intra système Communications inter systèmes Réseau

F. Butelle, E. Viennet, Système GTR2 IUT Paris 3 IPC Intra-UNIX (entre-autres) Les tubes communication unidirectionnelle en pratique bidirectionnelle à l alternat à condition de retourner le tube à chaque fois! Les sockets en mode intra Unix communication bidirectionnelle gestion similaire aux sockets inter Unix. En commun : communiquer = écrire dans un fichier!

F. Butelle, E. Viennet, Système GTR2 IUT Paris 3 IPC Intra-Unix : les Tubes Exemple : la commande Unix : ls grep d sort lire l entrée standard, écrire sur la sortie standard ls grep d sort tube

F. Butelle, E. Viennet, Système GTR2 IUT Paris 3 lecture et écriture dans un tube (exemple : communication bidirectionnelle) Processus Processus 2 read write write read tube tube 2 Espace mémoire géré par le noyau Uniquement entre proc. père et fils ou bien de même père Lectures destructives Taille mémoire limitée

F. Butelle, E. Viennet, Système GTR2 IUT Paris 3 Création d un tube En C : int pipe(int fd[2]) FILE *popen(char *cmd,char *option) // "r" ou "w" = pipe + fork En Java PipedWriter entrée PipedReader sortie

F. Butelle, E. Viennet, Système GTR2 IUT Paris 3 la commande pipe en C int pipe(int fd[2]) créé un tube formé de deux descripteurs fd[0] et fd[] retourne 0 en cas de réussite. au programmeur de décider quelle est l'entrée et la sortie ensuite en général on créée des fils par exemple un fils écrit dans fd[0] avec write : write(fd[0],bufentree,nbre_octets); l'autre lit les valeurs transmises avec read read(fd[],bufsortie,nbre); problème : comment savoir qu'il n'y a plus rien à lire?

F. Butelle, E. Viennet, Système GTR2 IUT Paris 3 popen() et l exécution de programmes distants Exemple de commande Unix : rsh machine cde params lance sur la machine distante la commande et l'on veut récupérer le résultat (sortie standard). FILE *fp = popen("rsh machine cde params","r"); retour = fread(buf,,nbre_octets,fp);

F. Butelle, E. Viennet, Système GTR2 IUT Paris 3 Java et les tubes : création // créer une sortie puis une entrée // reliée à cette sortie ou l'inverse! PipedWriter tubout = new PipedWriter(); PipedReader tubin = new PipedReader(tubout); //puis création des threads

F. Butelle, E. Viennet, Système GTR2 IUT Paris 3 Java : écriture dans un tube. // Dans thread producteur (écrit message m) String m = "bonjour"; // Conversion de m:string en buf:char[] buf = new char[m.length()]; m.getchars(0,m.length(),buf,0); //ecrit dans le tube out.write(cbuf,0,mes.length());

F. Butelle, E. Viennet, Système GTR2 IUT Paris 3 Java : lecture d'un tube char cbuf[]= new char[20]; int charlu=0; do{ try{ charlu = in.read(cbuf,0,20); //le consommateur se suicide au besoin! if (charlu == ){ System.out.println("fin"); System.exit(0); String s = new String(cbuf,0,charLu);

F. Butelle, E. Viennet, Système GTR2 IUT Paris 3 Exemple complet (TP JAVA) - Création du tube et des threads class RandomSum { public static void main(string args[]) throws InterruptedException { // Creation du tube: PipedWriter out = new PipedWriter(); PipedReader in; try { in = new PipedReader(out); Emetteur E = new Emetteur(out); Recepteur R = new Recepteur(in); E.start(); R.start(); E.join(); R.join(); catch (IOException e) { e.printstacktrace();

F. Butelle, E. Viennet, Système GTR2 IUT Paris 3 Exemple complet (TP JAVA) 2- Thread Emetteur class Emetteur extends Thread { private Writer out; private Random generateur; Emetteur( Writer out ) { this.out = out; generateur = new Random(); public void run() { for (int i=0; i < 0; i++) { float x = generateur.nextfloat(); System.out.println( "x= " + new Float(x).toString() ); try { out.write( new Float(x).toString() ); out.write( ';' ); // out.flush(); non necessaire ici catch (IOException e) { e.printstacktrace();

F. Butelle, E. Viennet, Système GTR2 IUT Paris 3 Exemple complet (TP JAVA) 3- Thread Récepteur class Recepteur extends Thread { private Reader in; private int end; private int nterm = 0; Recepteur( Reader in ) { this.in = in; end = 0; public void run() { float sum = 0; while (end == 0) { sum = sum + LitFloat(); System.out.println( "sum = " + sum ); System.out.println( "nterm = " + nterm );

F. Butelle, E. Viennet, Système GTR2 IUT Paris 3 Exemple complet (TP JAVA) 3- Thread Récepteur, suite private float LitFloat() { char c = ';'; String s = ""; do { try { c = (char)in.read(); catch (IOException e) { System.out.println( "Recepteur: fin?" ); end = ; return 0; if (c!= ';') { s = s + c; while (c!= ';'); System.out.println( "recu : " + s ); // Conversion de la chaine en float try { float x = Float.parseFloat(s); nterm = nterm + ; return x; catch (NumberFormatException e) { e.printstacktrace(); return 0;

F. Butelle, E. Viennet, Système GTR2 IUT Paris 3 TCP/IP et applications (rappels) NFS X RFS RPC NCS TCP XDR UDP Interface Socket ou TLI IP (Internet Protocol)

F. Butelle, E. Viennet, Système GTR2 IUT Paris 3 Format des messages (ou «segments») TCP 4 octets: 4 bits 6 bits 6 bits 6 bits Port source Port destination Numéro de séquence Numéro d acquittement Longueur entête Réservé Drapeaux Fenêtre Checksum Pointeur urgent Options éventuelles... Données

F. Butelle, E. Viennet, Système GTR2 IUT Paris 3 UDP (User Datagram Protocol) Protocole très simple sans connexion, sans acquittement (mode datagramme) Apporte à IP l utilisation des numéros de Port

F. Butelle, E. Viennet, Système GTR2 IUT Paris 3 Quelques services standards NO M N port P rotocole Com m entaire FT P DA T A 20 TCP Do n n é e s de tra n s f e rt de fi c h i e r FT P 2 TCP Co m m a n d e s de tra n s f e rt de fi c h i e r S S H 22 TCP S ec u re S hel l (c o n n e x i o n à di s t a n c e sé c u ri s é e ) Tel net 23 TCP Term i n a l v i rt u e l di s t a n t S M TP 25 TCP le c o u rri e r éle c t ro n i q u e da y t i m e 3 UDP, T CP Do n n e r l heu re d u jo u r! (ut i l e p o u r de s te s t s ) d o m a i n 53 UDP, T CP S erv e u r de n o m s TF TP 69 UDP Tri v i a l File Tra n s f e r P rot o c o l W W W 80 TCP W o rl d W i d e W e b RP C UDP, T CP Rem o t e P ro c e d u re Call lo g i n 53 TCP Util i sé p o u r rl o g i n : se «lo g u e r» s u r u n e m a c h i n e di s t a n t e NFS 2049 UDP Net w o rk File S y s t e m dae m o n : m o n t a g e de pa r t i t i o n s d i s t a n t e s

F. Butelle, E. Viennet, Système GTR2 IUT Paris 3 Sockets Un des mécanismes de communications entre processus Une API : Application Program Interface fait partie du noyau d'unix Bibliothèque de primitives l'extrémité d'un point de communication Application CLIENT Application SERVEUR SOCKET(S) SOCKET(S) protocole de transport

F. Butelle, E. Viennet, Système GTR2 IUT Paris 3 Création de socket Apporte un descripteur sorte de descripteur de fichier lecture/écriture dans un fichier communication bidirectionnelle Full Duplex (contrairement aux pipes) A la création d'un socket : Domaine (AF_UNIX, AF_INET, X25, DECNET, ) Type (SOCK_DGRAM, SOCK_STREAM, SOCK_RAW) PORT (TSAP) Adresse

F. Butelle, E. Viennet, Système GTR2 IUT Paris 3 Utilisation des sockets en mode connecté Algorithme d'un processus client: Créer une socket Se connecter au serveur ; écrire/lire des données Fermer la connexion. Algorithme d'un processus serveur: Créer un socket sur une machine sur un PORT particulier Ecouter sur le port pour accepter les connexions Accepter une connexion Lire/écrire des données Fermer la connexion

F. Butelle, E. Viennet, Système GTR2 IUT Paris 3 Utilisation en C en mode connecté C LIE N T S E R V E U R socket () socket () connect () bind () listen () : appel en général bloquant accept () : appel non bloquant write () read () transfert de données read () write () Utilisation de la socket comme d un descripteur de fichier close () close ()

F. Butelle, E. Viennet, Système GTR2 IUT Paris 3 Utilisation en C en mode non connecté C LIE N T S E R V E U R socket () sendto () recvfrom () transfert de données socket () bind () recvfrom () sendto () : appel en général bloquant : appel non bloquant

F. Butelle, E. Viennet, Système GTR2 IUT Paris 3 Classes et méthodes en Java -- mode connecté processus client InetAddress getlocalhost() getbyname() // adresse IP du serveur Socket getinputstream() getoutputstream() processus serveur ServerSocket accept() : Socket getinputstream() getoutputstream()

F. Butelle, E. Viennet, Système GTR2 IUT Paris 3 En Java, mode connecté CLIENT InetAddress ip = InetAddress.getByName("serv") socket = new Socket(ip,PORT) in = new BufferedReader(... socket.getinputstream())) out = new PrintWriter( socket.getoutputstream())) SERVEUR "serv" ServerSocket s = new ServerSocket(PORT) Socket cxion = s.accept() in = new BufferedReader( new InputStreamReader( cxion.getinputstream())) out = new PrintWriter( new BufferedOutputStream( cxion.getoutputstream())) out.println( );out.flush() Str = In.readLine(); socket.close() Transfert de données Str = In.readLine(); out.println( );out. flush() cxion.close()

F. Butelle, E. Viennet, Système GTR2 IUT Paris 3 En Java, serveur Multi-Threads, mode connecté leserveur = new ServerSocket(PORT); System.out.println("Le serveur démarre"); while (true) { System.out.println("Attend une nouvelle connexion"); Socket Cxion = leserveur.accept(); //création d'un thread a chaque connexion ThreadConnexion thcxion = new ThreadConnexion(Cxion); thcxion.start(); // fin while

F. Butelle, E. Viennet, Système GTR2 IUT Paris 3 Le thread de gestion de la connexion class ThreadConnexion extends Thread { ThreadConnexion(Socket laconnexion) { in=new BufferedReader(... laconnexion.getinputstream()))... out=new PrintWriter( laconnexion.getoutputstream())); public void run() { String str=in.readline(); out.println( );

F. Butelle, E. Viennet, Système GTR2 IUT Paris 3 Classes et méthodes en Java -- non connecté Processus client InetAddress getlocalhost() getbyname() // adresse IP du serveur s=datagrammsocket() p=datagrammpacket(buffer, adresse IPserveur, Port) s.send(p) Processus serveur s=datagrammsocket(port) s.receive(p)

F. Butelle, E. Viennet, Système GTR2 IUT Paris 3 Rendre les opérations non bloquantes En C : fcntl(desc, F_SETFL, O_NONBLOCK) En JAVA : setsotimeout(int duree) throws SocketException

F. Butelle, E. Viennet, Système GTR2 IUT Paris 3