Chapitre IX : Introduction à la programmation

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

Le modèle client-serveur

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

Flux de données Lecture/Ecriture Fichiers

Développement Logiciel

Programmation client-serveur sockets - RPC

Programmation Internet en Java

Projet de programmation (IK3) : TP n 1 Correction

M1 MIAGE - Réseau TP1

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

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

Cours 6 : Programmation répartie

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

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

RMI le langage Java XII-1 JMF

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

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

PROGRAMMATION PAR OBJETS

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

Remote Method Invocation (RMI)

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

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

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

Programmer en JAVA. par Tama

Synchro et Threads Java TM

INITIATION AU LANGAGE JAVA

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

Développement Web. Les protocoles

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

2 Chapitre 1 Introduction

Corrigé des exercices sur les références

Programmation Objet Java Correction

Introduction : les processus. Introduction : les threads. Plan

Une introduction à Java

Programmation Réseau SSH et TLS (aka SSL)

Principes des Architectures Middleware version 2.0

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

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

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

Programme Compte bancaire (code)

Programmation Par Objets

OS Réseaux et Programmation Système - C5

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

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

Architecture Orientée Service, JSON et API REST

OpenPaaS Le réseau social d'entreprise

Un ordonnanceur stupide

Premiers Pas en Programmation Objet : les Classes et les Objets

Remote Method Invocation Les classes implémentant Serializable

Algorithmique des Systèmes Répartis Protocoles de Communications

Auto-évaluation Programmation en Java

as Architecture des Systèmes d Information

Intergiciel - concepts de base

Service de noms des domaines (Domain Name System) Cours administration des services réseaux M.BOUABID,

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

Cours 1: Java et les objets

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

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

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

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

18 TCP Les protocoles de domaines d applications

Le protocole TCP. Services de TCP

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

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

Le MSMQ. Version 1.0. Pierre-Franck Chauvet

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

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

Chapitre 10. Les interfaces Comparable et Comparator 1

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

TP1 : Initiation à Java et Eclipse

Chapitre VI- La validation de la composition.

LES ACCES ODBC AVEC LE SYSTEME SAS

Une introduction à la technologie EJB (2/3)

UDP/TCP - Protocoles transport

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

TP, première séquence d exercices.

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

Capture, Filtrage et Analyse de trames ETHERNET avec le logiciel Wireshark. Etape 1 : Lancement des machines virtuelles VMWARE et de Wireshark

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

Rappels réseaux TCP/IP

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

Figure 1a. Réseau intranet avec pare feu et NAT.

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

Calcul Parallèle. Cours 5 - JAVA RMI

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

Java 1.5 : principales nouveautés

Introduction à HTTP. Chapitre HTTP 0.9

Introduction. Adresses

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

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

Prise en compte des ressources dans les composants logiciels parallèles

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

Résolution de noms. Résolution de noms

Mise en service d un routeur cisco

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

ACTIVITÉ DE PROGRAMMATION

Réseaux. DNS (Domaine Name System) Master Miage 1 Université de Nice - Sophia Antipolis. (second semestre )

Remote Method Invocation en Java (RMI)

Java Licence Professionnelle CISII,

Utilisation d objets : String et ArrayList

Transcription:

Chapitre IX : Introduction à la programmation réseau Eric.Leclercq@u-bourgogne.fr Département IEM http://ufrsciencestech.u-bourgogne.fr http://ludique.u-bourgogne.fr/~leclercq 24 mars 2011

1 La communication client serveur TCP/IP Principes de base 2 Les sockets en Java L API réseau de Java Les types de socket La résolution de nom Traitement des clients multiples Datagrammes UDP 3 Sockets avancés Options des sockets Sérialisation Sérialisation

Notion de socket Définition : Apparu à l origine dans les systèmes UNIX, un socket est une abstraction logicielle qui réalise une interface logicielle avec les services réseau du système d exploitation, grâce à laquelle un programme peut communiquer de manière uniforme avec d autre programme situés sur des machines différentes. Ainsi les socket permettent l échange de données entre 2 processus sur deux machines distinctes ; Chaque machine (programme) crée un socket ; Chaque socket est associé à un port (différent) ; Les deux socket devront éventuellement être connectés explicitement ; Les programmes lisent et écrivent dans les sockets.

Notion de port Un service réseau TCP/IP est accessible par un port ce qui permet d aiguiller les données vers le bon processus dans le SE. Un port est identifié par un entier (16 bits). Les ports numérotés de 0 à 511 sont qualifié well known ports : ils donnent accès aux services standards (transfert de fichiers FTP port 21, terminal Telnet port 23, courrier SMTP port 25, serveur web port 80) De 512 à 1023, on trouve les services Unix. Au delà de 1024 ce sont les ports utilisateurs : disponibles pour une application quelconque. Un service est souvent connu par un nom logique : la correspondance entre nom et numéro de port est donnée par le fichier /etc/services

API Java L API (Application Programming Interface) sockets est une bibliothèque de classes de communication pour TCP/IP (java.net). Elle offre deux modes de communication : le mode connecté correspond au protocole TCP : le protocole établit une connexion virtuelle se charge alors de maintenir l intégrité de la communication gére les erreurs de transmission Le mode non connecté correspond au protocole UDP : l envoi est fait au mieux (best effort). C est à l application de gérer la qualité de la transmission.

Les classes socket Java propose 4 types de classes : Pour UDP : DatagramSocket() pour un client DatagramSocket(ServerPort) pour un serveur Pour TCP : Socket(ServerName,ServerPort) pour un client ServerSocket(ServerPort) pour un serveur Les sockets TCP doivent être associé à des flux

Classe Socket Constructeur : Socket (String host, int port) création du socket vers le port et la machine hôte spécifiés Méthodes : close() : ferme le socket ; OutputStream getoutputstream() : renvoie un flux de sortie pour le socket ; IntputStream getiutputstream() : renvoie un flux de d entrée pour le socket.

Classe ServerSocket Constructeur : ServerSocket (int port) creation du socket serveur sur le port spécifié Méthodes : close() : ferme le socket ; OutputStream getoutputstream() : renvoie un flux de sortie pour le socket ; IntputStream getiutputstream() : renvoie un flux de d entrée pour le socket ; Socket accept() : écoute si une connexion est demandée pour ce socket et l accepte.

La résolution de nom La mise en œuvre de la résolution des noms se fait à travers un service DNS ou un fichier local (/etc/hosts). Ce service est accessible via la classe InetAddress. Cette classe représente les adresses IP et un ensemble de méthodes pour les manipuler. les applications doivent utiliser les méthodes getlocalhost, getbyname, ou getallbyname pour construire une nouvelle instance de InetAddress public class InetAddress implements Serializable InetAddress getbyname(string host) : construit un nouvel objet InetAddress à partir d un nom textuel sous forme symbolique ou sous forme numérique String gethostname() : obtient le nom complet correspondant à l adresse IP String gethostaddress() :obtient l adresse IP sous forme numérique byte[] getaddress() :obtient l adresse IP sous forme d un

Exemple 1 import java. net.*; 2 public class WhoAmI { 3 public static void main ( String [] args ) throws Exception { 4 if(args. length!= 1) { 5 System.err. println (" Usage : WhoAmI MachineName "); 6 System. exit (1) ; 7 } 8 InetAddress a = InetAddress. getbyname (args [0]) ; 9 System.out. println (a); 10 }

Clients multiples 1 public class ServeurConcurrent { 2 final static int port = 1314; 3 public static void main ( String [] args ) 4 throws IOException { 5 ServerSocket serveur = new ServerSocket ( port ); 6 while ( true ) { 7 Connexion connexion = new Connexion ( serveur. accept ()); 8 connexion. start () ;} 9 } 10 } 11 class Connexion extends Thread { 12 Socket connexion ; 13 Connexion ( Socket s) { 14 connexion = s;} 15 public void run () { 16 String requete ; 17 try { PrintWriter out = 18 new PrintWriter ( connexion. getoutputstream ()); 19 BufferedReader in = new BufferedReader ( new InputStreamReader ( 20 connexion. getinputstream ())); 21 out. println ("=>"); 22 while (!( requete = in. readline ()). equals (" FIN ")) { 23 out. println ( requete + " depuis " + connexion. getinetaddress () + ":" + connexion. getport ()); 24 out. flush (); 25 } 26 connexion. close (); 27 } 28 catch ( IOException e) { System.err. println (e);} 29 } 30 }

Datagrammes le protocole UDP est beaucoup plus simple que TCP : ne permet pas de reconstituer l ordre d envoi des messages ; donc plus efficace en bande passante ; mais moins fiable puisqu il n est pas doté d accusé de réception (automatique) les données sont placées dans un datagramme UDP, muni d un en-tête comportant les numéros de port d origine et de destination, la taille du datagramme et une somme de contrôle ; ce datagramme est lui-même placé dans un datagramme IP (ou paquet IP), muni d un en-tête comportant entre autre les adresses IP d émission et de réception ; la taille des données est limitée à 65 507 octets ; implémentés en Java par la classe DatagramPacket (les données sont contenues dans un tableau d octet).

Datagrammes Côté Client : 1 String s = " DATADATADTATA "; 2 byte [] donnees = s. getbytes (); 3 InetAddress adresse = InetAddress. getbyname ("le nom de l hote "); 4 int port = 5555; 5 DatagramPacket paquet = 6 new DatagramPacket ( donnees, donnees. length, adresse, port ); En réception côté serveur : il faut construire un datagramme càd tableau d octets qui recevra les données 1 byte [] donnees = new byte [4000];; 2 DatagramPacket d = 3 new DatagramPacket (donnees, donnees. length );

Socket UDP Les datagrammes sont émis et reçus par l intermédiaire d un objet de la classe DatagramSocket Côté client : on utilise un port pour construire le DatagramSocket, puis la méthode send 1 DatagramSocket client = new DatagramSocket (); 2 client.send ( paquet ); Côté serveur : le port doit être passé en argument au constructeur DatagramSocket(int), et la méthode receive remplit le tableau d octets avec les données du paquet reçu 1 DatagramSocket serveur = new DatagramSocket ( port ); 2 serveur. receive ( paquet );

Serveur ECHO UDP 1 import java.io.*; 2 import java. net.*; 3 class ServeurEchoUDP { 4 public static void main ( String [] args ) 5 throws UnknownHostException, IOException { 6 final int port = 8080; 7 DatagramPacket paquetrequete, paquetreponse ; 8 DatagramSocket serveur = new DatagramSocket ( port ); 9 byte [] donneesrequete = new byte [4000]; 10 while ( true ) { 11 paquetrequete = new DatagramPacket ( donneesrequete, donneesrequete. length ); 12 serveur. receive ( paquetrequete ); 13 paquetreponse = 14 new DatagramPacket ( paquetrequete. getdata (), 15 paquetrequete. getlength (), 16 paquetrequete. getaddress (), 17 paquetrequete. getport ()); 18 serveur.send ( paquetreponse ); 19 } 20 } 21 }

Client ECHO UDP 1 class ClientEchoUDP { 2 public static void main ( String [] args ) 3 throws UnknownHostException, IOException { 4 String nomhote = " localhost "; 5 InetAddress adresse = InetAddress. getbyname ( nomhote ); 6 final int port = 8080; 7 String requete, reponse ; 8 DatagramPacket paquetrequete, paquetreponse ; 9 DatagramSocket client = new DatagramSocket (); 10 BufferedReader entree = new BufferedReader (new InputStreamReader ( System.in) ); 11 byte [] donneesreponse = new byte [4000]; 12 while (!( requete = entree. readline ()). equals ("END ")) { 13 donneesrequete = requete. getbytes (); 14 paquetrequete = new DatagramPacket ( donneesrequete, 15 donneesrequete. length, adresse, port ); 16 paquetreponse = new DatagramPacket ( donneesreponse, donneesreponse. length ); 17 client.send ( paquetrequete ); 18 client. receive ( paquetreponse ); 19 reponse = new String ( paquetreponse. getdata ()); 20 System.out. println ( paquetreponse. getaddress () + " : " + reponse ); 21 } 22 client. close (); 23 } 24 }

Options des sockets Il est possible de définir le comportement des sockets avec les options via une méthode set suivie du nom de l option (grand nombre) : SO TIMEOUT (minuterie sur les méthodes bloquantes) : à tester avec Interrupted Exception ; TCP NODELAY : envoi de paquet très rapidement (attention aux impacts en terme de performance dans le cas de petits paquets) ; SO LINGER : gestion des données non transmises ; TCP KEEPALIVE : gestion de l inactivité.

Protocoles d objets sérialisés Définir les classes d objets sérialisables : 1 // cette définition doit ^etre acessible au client et au serveur 2 class Objet implements Serializable { 3 public String nom ; 4 public Objet ( String n) { 5 nom = new String (n); 6 } 7 public String tostring () { 8 return " Objet : nom "; 9 } 10 } Côté client : 1 public class Client { 2 static final int port = 8080; 3 public static void main ( String [] args ) throws Exception { 4 Socket socket = new Socket (args [0], port ); 5 System.out. println (" SOCKET = " + socket ); 6 ObjectOutputStream oss = new ObjectOutputStream ( socket. getoutputstream ()); 7 oss. writeobject (new Objet ("mon objet ")); 8 System.out. println ("END "); 9 // attention aux commandes de type protocole 10 oss. writeobject ("END ") ; 11 oss. close (); 12 socket. close (); 13 } 14 }

Protocoles ad-hoc versus objets sérialisés Côté serveur : 1 public class Serveur { 2 static final int port = 8080; 3 public static void main ( String [] args ) throws Exception { 4 ServerSocket s = new ServerSocket ( port ); 5 Socket soc = s. accept (); 6 ObjectInputStream ois = new ObjectInputStream ( 7 soc. getinputstream ()); 8 while ( true ) { 9 Object o = ois. readobject (); 10 if (o. equals ("END ")) break ; 11 System.out. println (o); // tester l objet 12 } 13 ois. close (); 14 soc. close (); 15 } 16 } L utilisation de l objet nécessite de connaître le type de l objet reçu et de transtyper Comment transtyper dynamiquement?