Programmation Réseau. API Java TCP. Jean-Baptiste.Yunes@univ-paris-diderot.fr. ! UFR Informatique ! 2013-2014

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

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

Threads. Threads. USTL routier 1

Synchro et Threads Java TM

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

Introduction : les processus. Introduction : les threads. Plan

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

INITIATION AU LANGAGE JAVA

Un ordonnanceur stupide

Programmation Internet en Java

Auto-évaluation Programmation en Java

Notion de thread (1/2)

Le modèle client-serveur

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

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

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

Remote Method Invocation Les classes implémentant Serializable

Programmer en JAVA. par Tama

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Calcul Parallèle. Cours 5 - JAVA RMI

Une introduction à Java

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

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

Une introduction à la technologie EJB (2/3)

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

NFP 121. Java et les Threads. Présentation : Thierry Escalarasse Mai 2007

Remote Method Invocation (RMI)

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

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

Java DataBaseConnectivity

Programmation Réseau SSH et TLS (aka SSL)

Cours 6 : Programmation répartie

Android UIThread, Thread, Handler et AsyncTask

PIGOURIER Vincent ANNEE SPECIALE 99/00 RAPPORT DE PROJET : LES THREADS JAVA. Responsable : Serge Rouveyrol

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

RMI le langage Java XII-1 JMF

PROGRAMMATION PAR OBJETS

Programmation client-serveur sockets - RPC

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

Principes des Architectures Middleware version 2.0

Projet de programmation (IK3) : TP n 1 Correction

Développement Logiciel

TP1 : Initiation à Java et Eclipse

Flux de données Lecture/Ecriture Fichiers

Programmation Objet Java Correction

TP, première séquence d exercices.

Introduction au langage Java

Initiation à JAVA et à la programmation objet.

Cours 1: Java et les objets

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

IFT287 Exploitation de base de données relationnelles et orientées objet. Laboratoire Mon premier programme Java en Eclipse

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

TD2 Programmation concurrentielle

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

Java Licence Professionnelle CISII,

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Premiers Pas en Programmation Objet : les Classes et les Objets

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

Apprendre la Programmation Orientée Objet avec le langage Java (avec exercices pratiques et corrigés)

Héritage presque multiple en Java (1/2)

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

Java - la plateforme

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

Corrigé des exercices sur les références

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

as Architecture des Systèmes d Information

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

RN2-Programmation Orientée Objet - JAVA CH 1 Introduction à la POO et Java

2 Chapitre 1 Introduction

Cours 14 Les fichiers

Java et les bases de données: JDBC: Java DataBase Connectivity SQLJ: Embedded SQL in Java. Michel Bonjour

Les connexions sans fil avec Android. JMF (Tous droits réservés) 1

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

Traitement de données

Programmation d Applications Concurrentes et Distribuées (INF431)

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

JADE : Java Agent DEvelopment framework. Laboratoire IBISC & Départ. GEII Université & IUT d Evry nadia.abchiche@ibisc.univ-evry.

Jacques Lonchamp. Conception. d applications en Java/JEE. Principes, patterns et architectures

ACTIVITÉ DE PROGRAMMATION

Derrière toi Une machine virtuelle!

1 Définition d une classe en Java

Environnements de développement (intégrés)

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

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

Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5

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

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

Utiliser Java sans BlueJ

Objets et Programmation. origine des langages orientés-objet

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

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

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

Langage Java. Classe de première SI

Java avancé Objectifs. version support 1.2

Accéder à PostgreSQL par JDBC via un tunnel SSL Java

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

Applet pour visualiser les variables «automate» notifiées

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

Généralités sur le Langage Java et éléments syntaxiques.

Transcription:

Programmation Réseau API Java TCP Jean-Baptiste.Yunes@univ-paris-diderot.fr UFR Informatique 2013-2014

Les flux réseau en Java pré-requis : utiliser correctement les classes d entrées-sorties Java (package java.io) le premier package à connaître est java.net deux classes importantes : ServerSocket Socket 2

ServerSocket ServerSocket(int port); créé une socket attachée au port spécifié et permettant de contrôler les demandes de connexion entrantes la méthode Socket accept(); permet d attendre une demande de connexion entrante, de l accepter lorsqu elle arrive et de fournir en retour une Socket de service autorisant la communication 3

// squelette de serveur ServerSocket socketattente=new ServerSocket(PORT); do { Socket service = socketattente.accept(); // connexion établie // la communication est désormais possible // bla bla bla bla service.close(); } while (true); socketattente.close(); 4

Socket Socket(String nom,int port); permet de créer une Socket attachée à un port éphémère local depuis laquelle une demande de connexion est lancée vers la ServerSocket de la machine de nom donné et attachée sur le port spécifié, lorsque la connexion est acceptée le constructeur termine normalement et la Socket est utilisable pour communiquer 5

// squelette de la partie cliente Socket service = new Socket("be.bop.a.lu.la",PORT); // connexion établie // la communication est désormais possible // bla bla bla bla // on raccroche service.close(); 6

Socket une socket TCP étant par nature un objet de communication bi-directionnel, il est possible de récupérer de chaque côté les flux de lecture et d écriture InputStream getinputstream(); permet d obtenir le flux de lecture correspondant aux écritures du pair OutputStream getoutputstream(); permet de récupérer le flux d écriture correspondant au flux de lecture du pair 7

// squelette permettant de récupérer les flux d entrées/sorties // Prérequis : Service est une Socket connectée InputStream is = service.getinputstream(); OutputStream os = service.getoutputstream(); // bla bla bla bla 8

On remarquera qu une fois la connexion établie, il n y a plus de distinction dans les rôles : les sockets sont rigoureusement indistinguables (dans leur rôle) modulo leurs propriétés réseau (leurs adresses par exemple) la communication est full-duplex C est la partie applicative qui est désormais en charge du protocole d échange qui envoie quoi, quand, etc. - Bonjour, - Salut, - Ca va?, - Ouais et toi?, 9

import java.net.*; import java.io.*; public class Serveur { public static final int PORT = 11111; public static void main(string []arguments) { try { ServerSocket socketattente = new ServerSocket(PORT); do { Socket service = socketattente.accept(); BufferedReader bf = new BufferedReader( new InputStreamReader(service.getInputStream())); String qui = bf.readline(); System.out.println(qui+" : vient de se connecter"); Thread.sleep(5000); PrintWriter pw = new PrintWriter( new OutputStreamWriter(service.getOutputStream())); pw.println("j'ai bien reçu ton message "+qui); pw.close(); bf.close(); service.close(); } while (true); } catch(exception e) { System.err.println("Erreur : "+e); e.printstacktrace(); System.exit(1); } } } 10

import java.net.*; import java.io.*; public class Client { public static final int PORT = 11111; public static void main(string []arguments) { try { Socket service = new Socket("localhost",PORT); PrintWriter pw = new PrintWriter( new OutputStreamWriter(service.getOutputStream())); pw.println(arguments[0]); pw.flush(); BufferedReader bf = new BufferedReader( new InputStreamReader(service.getInputStream())); String message = bf.readline(); System.out.println("Je viens de recevoir le message : "+message); pw.close(); bf.close(); service.close(); } catch(exception e) { System.err.println("Erreur sérieuse : "+e); e.printstacktrace(); System.exit(1); } } } 11

Un problème important se pose dans avec le squelette de serveur employé en effet, pendant que le service se déroule la ServerSocket n est pas dans un état acceptant (i.e. pas dans l appel à accept()) et donc les communications entrantes sont bloquées (en liste d attente, aka «votre correspondant n est pas disponible pour l instant, veuillez patienter») le serveur conçu comme tel sérialise les communications, ce mode n est en général utile que dans le cas où les communications sont (très) courtes c est un serveur itératif 12

Sinon (et donc en général), il est nécessaire de paralléliser les traitements de service, en déléguant le service à un concurrent : à un autre processus à un autre thread 13

Les threads Java la machine Java (JVM, aka Java Virtual Machine) possède son propre système de gestion d exécution chaque instance de JVM possède un ordonnanceur (scheduler) capable gérer dans le même espace mémoire différentes exécutions concurrentes chacune de ces exécutions s appelle un thread 14

Pour l instant, il est utile de savoir : construire un Thread : soit par instanciation d une sous-classe qui surcharge la méthode void run(); soit par association avec une classe qui implémente Runnable et donc la méthode void run(); 15

Pour qu un Thread démarre son exécution il faut invoquer sa méthode void start(); à cet instant une nouvelle exécution concurrente démarre il est possible à tout Thread d attendre la terminaison d un autre Thread par appel à void join(); sur le Thread à attendre équivalent pour les Threads de wait() pour les processus on notera que la terminaison d un Thread est obtenue par terminaison de l appel à run(); 16

Il est possible de forcer un Thread à suspendre son exécution par appel à la méthode statique sleep(int ms); qui a pour effet de suspendre le Thread qui fait appel à cette méthode pour la durée exprimée il existe bien d autres choses possibles avec les Threads, mais ce n est pas le sujet ici 17

class DuCode implements Runnable { private String nom; private Random alea; public DuCode(String nom) { this.nom = nom; alea = new Random(); } public void run() { for (int i=0; i<10; i++) { try { Thread.sleep(alea.nextInt()%5*1000); } catch(exception e) { } finally { System.out.println("Je suis "+nom+" i="+i); } } } } 18

public class Essai { public static void main(string []argument) { DuCode code1 = new DuCode("jacques"); DuCode code2 = new DuCode("émile"); Thread t1 = new Thread(code1); Thread t2 = new Thread(code1); Thread t3 = new Thread(code2); t1.start(); t2.start(); t3.start(); try { t1.join(); t2.join(); t3.join(); } catch(exception e) { } } } 19

Serveur multithreadé Il suffit de déléguer l exécution du service à un Thread dédié 20

// le service class Service implements Runnable { private Socket machaussette; Service(Socket s) { machaussette = s; } void run() { // bla bla bla bla } } machaussette.close(); 21

// squelette de serveur ServerSocket socketattente; socketattente = new ServerSocket(PORT); do { // établissement d une connexion (attente bloquante) Socket s = socketattente.accept(); // la communication est désormais possible, création du service Thread t = new Thread(new Service(s)); // on démarre l exécution concurrente du service t.start(); // play it again Sam } while (true); socketattente.close(); 22