Java - TP3. Nicolas Baudru, Carine Guivier-Curien, Laurent Vallet. Année 2008-2009



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

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

Programmation Internet en Java

Compte-rendu de projet de Système de gestion de base de données

Le service FTP. M.BOUABID, Page 1 sur 5

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

TP n 2 : Installation et administration du serveur ProFTP. Partie 1 : Fonctionnement du protocole FTP (pas plus de 15min)

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

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

TP : Shell Scripts. 1 Remarque générale. 2 Mise en jambe. 3 Avec des si. Systèmes et scripts

Réseau : Interconnexion de réseaux, routage et application de règles de filtrage.

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Développement Logiciel

Cours 14 Les fichiers

Remote Method Invocation (RMI)

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

SOLUTION D ENVOI DE SMS POUR PROFESSIONNELS

contact@nqicorp.com - Web :

Projet de Veille Technologique

Documentation pour l envoi de SMS

RMI le langage Java XII-1 JMF

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

TAGREROUT Seyf Allah TMRIM

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

LES ACCES ODBC AVEC LE SYSTEME SAS

Administration Centrale : Opérations

Serveur FTP. 20 décembre. Windows Server 2008R2

TP1. Outils Java Eléments de correction

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

Cours 1: Java et les objets

Auto-évaluation Programmation en Java

Projet gestion d'objets dupliqués

SweetyPix, mode d'emploi

Paiement de factures aux entreprises créancières RBC Guide du client

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

QTEK 9100 QTEK S200 HP 6915

TP réseaux 4 : Installation et configuration d'un serveur Web Apache

TP, première séquence d exercices.

MANUEL D INSTALLATION D UN PROXY

KAJOUT WASSIM INTERNET INFORMATION SERVICES (IIS) 01/03/2013. Compte-rendu sur ISS KAJOUT Wassim

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

Network musical jammin

Didacticiel de mise à jour Web

Procédure d Installation et de mise à jour du client CAN-8 32 bits

Programmation client-serveur sockets - RPC

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

PARAMETRER LA MESSAGERIE SOUS THUNDERBIRD

Systeme d'exploitation

Service de certificat

Les messages d erreur d'applidis Client

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

Application de lecture de carte SESAM-Vitale Jeebop

Télécharger et Installer OpenOffice.org sous Windows

MANUEL. de l application «CdC Online» pour Windows. Table des matières

LOGICIEL DE GESTION DE DOCUMENTS PDF : PROJET INFO 1

Installation et prise en main

TP réseau Android. Bidouilles Tomcat. a) Installer tomcat : il suffit de dézipper l'archive apache-tomcat windowsx64.zip.

Je communique par

FORMATION PcVue. Mise en œuvre de WEBVUE. Journées de formation au logiciel de supervision PcVue 8.1. Lieu : Lycée Pablo Neruda Saint Martin d hères

TP2 - Conguration réseau et commandes utiles. 1 Généralités. 2 Conguration de la machine. 2.1 Commande hostname

Flux de données Lecture/Ecriture Fichiers

Chapitre 2. Classes et objets

Création d'un site dynamique en PHP avec Dreamweaver et MySQL

Premiers Pas en Programmation Objet : les Classes et les Objets

Guide d'utilisation du logiciel de NEWSLETTERS

Module SMS pour Microsoft Outlook MD et Outlook MD Express. Guide d'aide. Guide d'aide du module SMS de Rogers Page 1 sur 40 Tous droits réservés

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

Téléphones IP 712 et IP 706 ADTRAN Téléphones IP 650, IP 601, IP 501 et IP 430 ADTRAN Polycom

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

Installation d'un serveur DHCP sous Windows 2000 Serveur

Java 7 Les fondamentaux du langage Java

Procédure d'installation complète de Click&Decide sur un serveur

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

Télécom Nancy Année

Configurez votre Neufbox Evolution

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

TP Sur SSH. I. Introduction à SSH. I.1. Putty

Système Principal (hôte) 2008 Enterprise x64

Messages d'erreurs. Redémarrez votre PC en cliquant sur Démarrer, en sélectionnant ensuite Arrêter puis en cochant Redémarrer

claroline classroom online

Sommaire 1 CONFIGURER SA MESSAGERIE 2 2 CONSULTER VOS MAILS SUR INTERNET (WEBMAIL) 7 3 PROBLEMES POSSIBLES 8

FreeNAS Shere. Par THOREZ Nicolas

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

SQUID P r o x y L i b r e p o u r U n i x e t L i n u x

MANUEL D INSTALLATION

Le modèle client-serveur

Programmation Orientée Objet

Network Shutdown Module V3 Extension du Manuel Utilisateur pour architecture Virtualisée Virtual Server de Microsoft

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

Storebox User Guide. Swisscom (Suisse) SA

TP Service HTTP Serveur Apache Linux Debian

NAS 208 WebDAV Une alternative au protocole FTP pour le partage sécurisé des fichiers

Java DataBaseConnectivity

Plateforme PAYZEN. Intégration du module de paiement pour la plateforme Magento version 1.3.x.x. Paiement en plusieurs fois. Version 1.

PG208, Projet n 3 : Serveur HTTP évolué

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

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Procédure d installation détaillée

TBI-DIRECT. Bridgit. Pour le partage de votre bureau. Écrit par : TBI Direct.

Transcription:

Java - TP3 Nicolas Baudru, Carine Guivier-Curien, Laurent Vallet Année 2008-2009 Le but de ce TD est d'écrire une application client/serveur de type msn : 1. Des clients se connectent à un serveur 2. Un client envoie un message au serveur 3. le serveur distribue le message à tous les clients. Nous nous focaliserons ici uniquement sur les aspects réseaux. La conception de l'ihm (Interface Homme-Machine) ne fait pas partie de ce TP. Par conséquent, elle vous est donnée clé en main. IHM.class Affiche les messages transmis par le Client et retourne au client le message à envoyer Demande à l'ihm d'afficher les messages reçus et transmet les messages de l'ihm au serveur Client.class Client.class Serveur.class Recoit un message d'un client puis le transmet à tous les clients Client.class 1

Ce TP se décompose en trois étapes. Dans un premier temps, vous allez aprendre à utiliser l'ihm qui vous est donnée. Puis vous écrirez la partie client de l'application. Le client se connecte au serveur, transmet et reçoit des messages et interagit avec l'ihm. A cette étape, vous utiliserez l'ihm vu à l'étape 1 ainsi qu'un serveur clé en main qui vous sera fournit pour pouvoir tester votre client. Enn, si vous allez au bout de ce TP, vous écrirez vous-même la partie serveur. Exercice 1 (prise en main de l'ihm) La classe IHM est disponible à l'adresse http ://nicolas.baudru.perso.esil.univmed.fr/enseignement/enseignement.html Sa structure est la suivante : public class IHM implements ActionListener { public IHM () { // Initialise l 'IHM public void go () { // Une interface graphique type msn s ' affiche à l ' écran synchronized public String getnextmessagetosend () { // Affiche dans un terminal le message tapé dans l ' IHM // puis retourne ce message public void writemessage ( String mess ) { // écrit dans la fenêtre de discussion // ET dans le terminal le chaîne de caracères mess // fin class IHM Remarque : la méthode getmessagetosend() est bloquante. Cela signie que le thread invoquant cette méthode reste bloqué sur cette méthode (son exécution est suspendue) jusqu'à ce que l'utilisateur presse la touche envoi de l'ihm. 1. Ecrire une classe TestIHM1 qui successivement ache dans un terminal le message écrit dans l'ihm, puis demande à l'utilisateur de taper une phrase dans le terminal, et enn, ache cette dernière phrase dans l'ihm. 2. Ecrire une classe TestIHM2 qui de manière concurrente ache dans un terminal tous les messages écrits dans l'ihm par l'utilisateur ache dans l'ihm tous les messages écrits par l'utilisateur dans le terminal. Indication : l'utilisation de Threads est nécessaire. Exercice 2 (coté client) L'écriture du programme client nécessite de savoir faire trois choses : 2

comment établir une connexion avec le serveur comment envoyer des messages au serveur comment recevoir des messages du serveur Établir une connexion en Java : Pour établir une connexion à un serveur, il faut connaître le serveur, i.e. son adresse IP et son numéro de port TCP. Autrement dit il faut connaître la socket du serveur (c-à-d le couple (IP,port)). En Java c'est la seule information nécessaire à l'établissement d'une connexion. Tout le reste se fait automatiquement au travers de la classe Socket du package java.net : Socket masocket = new Socket (" 192. 164. 2. 21 ", 5000); Cette simple ligne crée une socket du coté client nommée masocket puis établie une connexion entre masocket et la socket du serveur ("192.164.2.21", 5000). Recevoir des données sur une socket : Toutes les classes et méthodes qui suivent se trouvent dans le package java.io.* qui est donc à inclure dans votre programme. Pour recevoir des données, il sut de demander à la socket de nous donner ce qu'elle a reçu : monflotbasniveau = masocket. getinputstream (); Cette méthode renvoie un objet de type InputStream permettant de récupérer un ot d'e/s de bas niveau (un truc du type 010011...). An de récupérer un ot plus "sympa", à base de caractères, on va chaîner un objet de type InputStreamReader à ce ot de bas niveau : InputStreamReader monflotdecaracteres = new InputStreamReader ( monflotbasniveau ); L'objet monflotdecaracteres permet de récupérer le ot de caractères correspondant au ot de bas niveau (cela se fait caractère par caractère à l'aide de la méthode read()). An d'utiliser facilement ce ot de caractères et pour plus d'ecacité, nous pouvons le "bueriser" : BufferedReader monbuffer = new BufferedReader ( monflotdecaractere ) Nous pouvons alors récupérer les messages lignes par lignes par exemple : String monmessage = monbuffer. readline (); Pour fermer l'ensemble des ots de données, il sut de taper monbuffer. close (); Envoyer des données sur une socket : Plusieurs méthodes sont possibles. Par exemple nous pouvons chaîner un BueredWritter à un OutputStreamWritter, lui même chaîné au ot de bas niveau de sortie du socket : BufferedWritter monbuffer = new BufferedWritter ( new OutputStreamWritter ( monsocket. getoutputstream ())); 3

Pour écrire sur la socket : monbuffer. write (" blabla " ); Les messages écrits seront envoyés à la socket une fois le buer plein (on peut aussi utiliser la méthode ush() pour forcer le buer à ce vider). Plus simplement, on peut aussi utiliser PrintWritter qui se chargera de transformer une chaîne de caractères en ot de bas niveau. Cet objet doit être chaîné au ot de bas niveau de la socket : PrintWritter machaine = new PrintWritter ( monsocket. getoutputstream ()); Et pour écrire sur la socket : machaine. println (" blabla " ); // suivit de machaine. flush (); // pour envoyer les données. Pour fermer l'ensemble des ots de données, il sut de taper machaine. close (); Questions : Pour pouvoir tester votre programme client, vous aurez besoin d'un serveur test. Celui-ci est disponible à l'adresse http ://nicolas.baudru.perso.esil.univmed.fr/enseignement/enseignement.html Pour le faire fonctionner, vous devez télécharger le chier Serveur.zip, le décompresser, puis taper java Serveur dans un terminal (à partir du répertoire décompressé). Le port par défaut utilisé par le serveur est le port 5000. Si ce port n'est pas disponible ou ne fonctionne pas sur votre machine, vous pouvez choisir un autre port pour le serveur en le rajoutant simplement en argument. Par exemple java Serveur 12321 démarre le serveur sur le port 12321. 1. Écrire la classe ClientSimplie décrite ci-dessous. Cette classe est un petit programme qui permet de se connecter au serveur (en lui précisant l'adresse IP et le port du serveur), de lui envoyer un message et enn de recevoir un message du serveur. 2. Lorsque la classe compile, tester-la en utilisant le serveur test. Pour cela lancer le programme Serveur dans un premier terminal. Dans un autre terminal, lancer votre programme Client- Simplie. Vérier que vous recevez bien le message envoyé. 3. Pousser le test un peu plus loin en exécutant de nouveau le programme ClientSimplie dans deux nouveaux terminaux simultanément. Que se passe-t-il? 4. Écrire une nouvelle classe ClientSansIHM basée sur le modèle de la classe ClientSinplie mais utilisant deux threads dans son main() : l'un permet d'envoyer en boucle des messages au serveur (les messages à envoyer sont tapés par l'utilisateur dans le terminal) l'autre permet de receptionner tous les messages en provenance du serveur. 5. Tester de nouveau votre classe avec le serveur test. 6. Enn, écriver la classe Client nale en intégrant l'ihm à la classe ClientSansIHM. 4

import java. io.*; import java. net.*; import java. util.*; public class ClientSimplifie { BufferedReader lecture ; // pour le flot d ' entrée venant du serveur PrintWriter ecriture ; // pour le flot de sortie vers le serveur Socket sock ; // le socket client public ClientSimplifie () { // établie une connexion au serveur par un appel à connexionserveur () private void connexionserveur ( String adresseipserveur, portserveur ) { // créer un objet socket lié au socket serveur et l ' affecte à sock // puis établie les chaînages de flot nécessaires // pour l ' envoi et la reception de messages public static void main ( String [] args ) { // crée un nouveau client // envoi un seul message au serveur // puis dans une boucle infini, affiche les messages reçus du serveur // fin classe ClientSimplifie Exercice 3 (coté serveur) Quatre choses à savoir faire : créer une "socket d'écoute" qui attend une demande de connexion accepter et établir une connexion avec le client comment envoyer des messages au client comment recevoir des messages du client Créer une socket d'écoute : Très simple en Java. La ligne suivante crée une socket d'écoute sur un port donné. Cette socket écoute les requêtes entrantes d'un client qui souhaiterait se connecter. ServerSocket monsocketecoute = new ServeurSocket (6345); Accepter et établir une connexion avec le client : Socket monsocket = monsocketecoute. accept (); Cette ligne crée une nouvelle socket chez le serveur (diérente du socket d'écoute) et établie une connexion avec le client. La méthode accept() est bloquante, c'est-à-dire que le thread courant exécutant cette méthode va rester bloqué jusqu'à ce qu'une demande de connexion provenant d'un client se produise. La méthode accept() va alors créer la nouvelle socket chez le serveur et établir 5

la connexion entre cette nouvelle socket et la socket client (le serveur connaît la socket client car la demande de connexion d'un client contient toujours la socket de ce client). Remarques : Notez bien que la connexion s'eectue sur un port diérent de la socket d'écoute. Cette dernière peut donc continuer d'attendre d'autres demandes de connexion. Pour chaque demande de connexion, une nouvelle socket est créée coté serveur. Donc chez le serveur, un client peut être identié à la socket créée lors de l'acception de la requête de connexion. Recevoir et envoyer des données sur la socket : L'envoi et la réception de données du coté serveur s'eectuent de la même manière que pour le client. Il sut d'utiliser la socket correspondant à un client donné pour communiquer avec ce client. Question : Tenter d'écrire votre propre serveur. Celui-ci ressemble au Client mais doit en plus pouvoir gérer une liste de clients. Son comportement est des plus simples. Le serveur attend un message d'un client quelconque puis diuse ce message à l'ensemble des clients. 6