Vous êtes sur la page 1sur 27

Ecole Nationale des Sciences Appliques

Master Spcialis en Rseaux et Systmes

Programmation Systme

Ralis par :
BERREZOUQ Meryem ELALAMI Safae HASANI Nissrine MASSAOUDI Nourelhouda
1

Sommaire :

Introduction I. Cahier de charge II. Description du projet III. Technologies et outils utiliss 1. Socket 2. JMF IV. Aperu sur lapplication 1. Authentification et accueil 2. Transfert de fichiers 3. Lecteur Vidos V. Conclusion

3 4 5 5 5 6 10 10 14 20 27

INTRODUCTION

Les protocoles de communication telle que TCP/IP permettent la communication point point entre deux applications sexcutant ventuellement sur deux machines diffrentes. Le dtail du transfert effectif des donns entre deux applications est spcifi par le protocole de communication de la couche transport, mais le moment et la faon dont les applications interagissent entre elles sont laisss la charge du programmeur. Larchitecture client/serveur est devenue la mthode incontournable pour la communication point point au niveau applicatif, quand le protocole utilis est de la famille TCP/IP. Les applications peuvent tre classes en deux catgories: les clients:applications qui prennent linitiative du lancement de la communication, cest dire demande louverture de connexion, lenvoi dune requte, lattente de la rponse la requte, reprise de lexcution du programme. les serveurs: applications qui attendent la communication, c'est--dire lattente dune demande douverture de connexion, la rception dune requte et lenvoi dune rponse. Notre application est compose de deux axes principaux, premirement de crer une application de transfert de fichiers entre un client et un serveur en se basant sur larchitecture Client/ Serveur et en utilisant les sockets, ainsi que la cration dun lecteur vidos intelligent, en travaillant avec JMF, qui sera la disponibilit de tous les utilisateurs connects.

I.

Cahier des charges :


Pour satisfaire le besoin des clients et leurs offrir des fonctionnalits utiles dans

leurs rseau, les utilisateurs connects peuvent donc bnficier de ce projet informatique qui consiste en la cration d'un programme de transfert de fichier par rseau, le cahier des charges est le suivant :

Authentification des utilisateurs : tout dabord un utilisateur doit sauthentifier suivant les donnes enregistres dans la base de donnes, cest un moyen qui nous permet de scuriser au dbut notre serveur de tout accs malveillant, donc seuls les profils existants peuvent accder.

Architecture client-serveur : le client reoit un fichier demand du serveur. Paralllisme : le serveur supporte plusieurs clients simultans. Le client ne peut raliser qu'un transfert la fois, mais il est possible de dmarrer plusieurs instances du client sur la mme machine.

Contrle du transfert : le transfert sera gr par une connexion TCP entre le serveur et chaque client.

Intgrit du transfert : lorsque le transfert est russi, le fichier est garanti intgre. Pour cela, la somme de contrle du fichier est teste avant et aprs le transfert.

Interface utilisateur : interface graphique et console pour que le programme puisse fonctionner sur un systme sans support graphique.

Lecteur des vidos : un lecteur vido complet est la disposition de nos utilisateurs cr par lapplication JMF.

II.

Description du projet :
Lintrt principal de ce projet et de rendre facile aux clients connects de

bnficier dun ensemble de fonctionnalits, pour cela notre application est compose de deux parties principales : Le transfert de fichiers : un client a la possibilit de tlcharger des fichiers partir du serveur, pour cela tous les fichiers dun serveur sont la disposition du client lorsquil se connecte, la fin de tlchargement on aura un message qui montre que le tlchargement de fichier est termin. Lecteur vidos : en utilisant les librairies JMF, on a pu raliser un lecteur vido intelligent qui nous permet de voir les vidos partir de notre machine locale.

III.

Technologies et outils utiliss :


Le Java sera le langage de programmation que nous utiliserons pour

concevoir notre projet. Cest un langage orient objet de plus en plus rpandu grce sa portabilit multiplateforme. De plus, la licence choisie par les concepteurs SUN nous permettra de crer une application libre de droits. Pour la ralisation de ce travail on a utilis dautres outils parmi eux :

1. Socket :
En gnral, un socket identifie de faon unique une communication entre deux logiciels. Il sagit dun modle permettant la communication inter processus afin de permettre divers processus de communiquer aussi bien sur une mme machine qu travers un rseau TCP/IP.

La communication par socket est souvent compare aux communications humaines. On distingue ainsi deux modes de communication : Le mode connect (comparable une communication tlphonique), utilisant le protocole TCP. Dans ce mode de communication, une connexion durable est tablie entre les deux processus, de telle faon que ladresse de destination nest pas ncessaire chaque envoi de donnes. Le mode non connect (analogue une communication par courrier), utilisant le protocole UDP. Ce mode ncessite ladresse de destination chaque envoi, et aucun accus de rception nest donn.

2. JMF
Java Media Framework(JMF) est une API extension la JDK, fournie par Sun Microsystems et IBM. Elle permet d'incorporer des donnes de type audio ou vido dans des applications Java et des applets.

Depuis la version 1.0 de JMF, on peut lire divers formats vido dans des applications Java. D'autres fonctionnalits sont ajoutes depuis la version 2.0 comme la capture camra, la sauvegarde, la transmission, le transcodage, etc.

Elle a intgr plusieurs amliorations au niveau RTP / RTSP et de nombreux composants ont t ajouts et plusieurs bogues ont t corrigs. JMF est considre comme l'un des composants les plus importants de la famille Java Media, qui comprend galement Java3D, Java2D, Java Sound et Java Advanced Image(JAI) qui permettent aux dveloppeurs d'ajouter facilement et rapidement des fonctionnalits multimdias leurs applications, telle que le streaming vido, le graphisme 3D et le traitement des images.

a. Ses fonctionnalits :
Outre la possibilit d'incorporer de l'audio et de la vido dans vos applications, JMF permet l'envoi et la rception de mdias partir du rseau grce RTP. L'API permet en outre : La capture audio et vido avec un microphone et une camra, puis l'enregistrement de ces donnes dans un format donn. Le traitement des fichiers vido (multiplexage, segmentation, compression) ; la transmission et la rception de l'audio et de la vido en temps rel sur Internet (streaming vido) ou sur le rseau comme dj mentionn ; le transcodage des donnes, c'est--dire le passage d'un format un autre avec de nouveaux codecs tout en admettant une architecture de plugin qui permet d'intgrer facilement de nouveaux codecs.

b. Son Architecture :
Comme montre la figure ci-dessous, des appareils tels que le lecteur de cassettes et le magntoscope fournissent un modle familier pour l'enregistrement, le traitement et la prsentation des mdias base de temps.

En effet, lorsque vous regardez un film l'aide d'un magntoscope, vous devez fournir le flux mdia au magntoscope en insrant une cassette vido. Le magntoscope lit et interprte les donnes sur la bande et envoie les signaux appropris votre tlviseur et aux haut-parleurs pour la diffusion vido.

La chaine de traitement en JMF peut tre assimile ce processus de diffusion en admettant quatre nuds principaux pour le traitement :

Capture Device : est le priphrique de capture. Data Source : c'est la source de donnes qui modlise les sources de donnes audio et vido.

Processor (player) : qui assemble les sources de donnes pour construire un format vido pouvant tre affich l'utilisateur.

OutPutDevice : est la sortie du player rcupre par le DataSink qui peut tre un fichier, un cran, etc.

Datasink : une rfrence de l'interface DataSink rcupre le mdia du player et le redirige vers une destination. Un DataSink permet par exemple d'enregistrer un mdia dans un fichier ou de l'afficher directement sur l'cran.

JMF et transfert de Mdias: API RTP

Cette API a pour but de permettre de grer et transmettre un flux RTP en Java. On va pouvoir, grce celle-ci, dvelopper son propre serveur de streaming et ainsi centraliser et distribuer de l'audio ou de la vido. Elle permet galement de choisir les traitements effectus (compression, effet ...) afin de dterminer le type de flux que l'on souhaite transmettre. Enfin on pourra capturer des flux multimdia provenant de priphriques (micro, camra) et les retransmettre directement sur le rseau et ainsi mettre en place des applications de multi-confrences. Son fonctionnement : L'API va permettre de grer des sessions RTP trs simplement. Tout d'abord comme pour l'API de base JMF, elle fournit une classe Manager "RTPManager" qui centralise toutes les fonctions lies une session RTP. Cette classe va alors nous permettre l'envoi et la rception de flux RTP. Rception d'un flux RTP : L'accs une ressource par un serveur RTP se fait en utilisant une adresse spcifique de la forme rtp://[adresse ip]:[port]/[type]/. On peut alors crer un objet MediaLocator partir de cette adresse qui sera utilis comme source du flux RTP. On peut ensuite utiliser l'API de base JMF pour prsenter le flux arrivant dans une application ou une applet. Envoi d'un flux RTP : Dans un premier temps l'objet Processor va nous permettre d'appliquer les traitements ncessaires avant la transmission sur le rseau. On va alors pouvoir paramtrer le type d'encodage, la qualit et tous les paramtres lis au fichier que l'on souhaite transporter. Une fois ces traitements effectus sur le fichier on utilise le PushDatasource qu'il nous renvoie en sortie
9

pour crer les flux d'envoie. Le RTPManager nous permet alors de crer une session RTP pour chaque flux que l'on souhaite transiter.

IV.

Aperu sur lapplication :


Notre application est compose de deux parties principales cest : le transfert

de fichiers et un lecteur vidos, et afin daccder ces deux modules on a pens de limiter laccs ces fonctionnalit pour la scurit des donnes, donc chaque client avant de bnficier de ces outils doit dabord sauthentifier, pour cela on a cr une classe :

1. Authentification :
Cest une interface graphique qui aura pour rle de vrifier le login et le mot de passe quun utilisateur fait entrer avec ceux existants dans la base de donnes, une connexion la base de donne est alors ncessaire pour dfinir la chaine de connexion, et aussi pour dfinir la requte de test sur le login et le mot de passe :
public class authentification extends javax.swing.JFrame { /** Creates new form authentification */ public authentification() { initComponents(); } private void initComponents() { //lesnsemble des element graphique} private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { // instanciation de la class Connecter Connecter con =new Connecter(); con.connect(); //verefier selon les donne entre si c'est juste on accede a une autre fenetre sinn msg erreur est affich

10

if(con.connecterDb(txtlogin.getText(), txtpass.getText())){ //fermer cette fenetre et ouvrir une autre celle principale this.dispose(); Home pg = new Home(); pg.setVisible(true); } else JOptionPane.showMessageDialog(null, "Le Login ou le Password est eron, resaisisez");

Interface Graphique :

La classe qui contient la chaine de connexion la base de donnes ainsi que lexcution de la requte qui vrifie le login et le mot de passe : Connecter
public class Connecter { private Connection private Statement private ResultSet conn; stmt; rs;

11

private String pilote = "com.mysql.jdbc.Driver"; private String url = "jdbc:mysql://localhost:3306/"; private String dbName = "authentification"; private String login = "root"; private String pass = "master"; // Mthode de connection la base public void connect() { try { //definition des informations de la chaine de connexion url += dbName; Class.forName(pilote); conn = DriverManager.getConnection(url,login,pass); stmt = conn.createStatement(); System.out.print("connecter"); } catch ( SQLException E) { JOptionPane.showMessageDialog(null,"Erreur de connexion la base. Veuillez contacter votre administrateur systme","Connexion",JOptionPane.WARNING_MESSAGE); System.out.println("1"); } catch ( ClassNotFoundException E) {} } //methode contenant la requette avec koi on va tester sur la base de donnes

12

public boolean connecterDb(String login, String ps){ try { stmt = (Statement) conn.createStatement(); rs=stmt.executeQuery("select pseudo, password from user Where pseudo='"+ login +"' and password ='" +ps+ "'"); if(rs.next()){ System.out.println("le pseudo est"+rs.getString("pseudo") ); return true; } else{ return false; } } catch (SQLException ex) { } return false; } }

Aprs cette phase dauthentification on accde la page daccueil cest la quon peut choisir entre les deux fonctionnalits dont on peut bnficier pour cela on a cr cette interface qui contient un menu o on peut choisir:

13

2. Transfert de Fichiers
Architecture Client/serveur :

Tout utilisateur dans l'entreprise doit pouvoir accder toute information utile sa tche ds lors que cet accs est autoris par les rgles de confidentialit et de scurit en vigueur. L'accs doit tre instantan et doit pouvoir tre fait partir de n'importe quel poste de travail. Une solution est apporte dans les annes 90 : le modle client-serveur.
14

Une application est btie selon une architecture client-serveur lorsqu'elle est compose de deux programmes, cooprant l'un avec l'autre la ralisation d'un mme traitement. La premire partie, appele module client, est installe sur le poste de travail alors que la seconde, appele module serveur, est implante sur l'ordinateur (ou mme des ordinateurs ventuellement situs dans des lieux gographiques diffrents) charg de rendre le service. -Service : Le serveur est fournisseur de services. Le client est consommateur de services. -Protocole : C'est toujours le client qui dclenche la demande de service. Le serveur attend passivement les requtes des clients. -Partage des ressources : Un serveur traite plusieurs clients en mme temps et contrle leurs accs aux ressources. -Localisation : Le logiciel client-serveur masque aux clients la localisation du serveur. -Htrognit : Le logiciel client-serveur est indpendant des plates-formes matrielles et logicielles. -Redimensionnement : Il est possible d'ajouter et de retirer des stations clientes. Il est possible de faire voluer les serveurs. -Intgrit : Les donnes du serveur sont gres sur le serveur de faon centralise. Les clients restent individuels et indpendants. -Souplesse et adaptabilit : On peut modifier le module serveur sans toucher au module client. La rciproque est vraie. Si une station est remplace par un modle plus rcent, on modifie le module client (en amliorant l'interface, par exemple) sans modifier le module serveur.

Dans l'architecture client-serveur, une application est constitue de trois parties : l'interface utilisateur, la logique des traitements, et la gestion des donnes. Le client n'excute que l'interface utilisateur (interfaces graphiques de type Windows) et la logique des traitements (formuler la requte), laissant au serveur de bases de donnes la gestion complte des manipulations de donnes. Le serveur- qui apparat dans client- correspond tout un ensemble complexe de logiciels appel middleware qui se charge de toutes les communications entre les processus.
15

Implmentation :
a) Serveur :

Classe serveur :
Cette classe permet de crer un nouvel socket afin dtablir une connexion avec le client. Une fois la connexion est tablie alors le serveur cre deux thread afin de grer la communication et la transmission avec le client.

public class Serveur { public static void main (String args[]) throws IOException { //Cration dun socket serveur ServerSocket s = new ServerSocket(8189); }

Classe Communication :
Cette classe permet de crer un objet laide dun constructeur qui prend en paramtre un nouveau socket ainsi que le numro du client qui vient de se connecter. Cette classe assure la communication entre le serveur et plusieurs clients.

class Communication extends Thread implements Runnable{ private BufferedReader in; private PrintWriter out; private int saisie2; private Socket SocketConnection;

16

private int connecte; public Communication(Socket connect, int g) throws IOException { SocketConnection = connect; g = connecte; }

Classe transmission :
Lorsque le serveur rcupre le nom de fichier envoy par le client, il rcupre aussi son chemin et il essaye de lire les donnes depuis le fichier puis les envoyer.

class transmission extends Thread implements Runnable { private Socket SocketTransmition; private BufferedReader in; private PrintWriter out; public static String str; private int connecte; public transmission(Socket connect, int g) throws IOException { SocketTransmition = connect; g = connecte; }}

Classe transmitionSocketserveur
Cette classe assure le transfert du fichier depuis le serveur vers le client pour cela on doit crer un socket qui s'occupe du transfert sur un autre port.
17

Le serveur de transmission reste en attente d'une nouvelle connexion jusqu' la connexion dun client .Une fois un client se connecte sur le mme port ddi au transfert du fichier, le serveur effectue le transfert du fichier vers le client.

class transmissionSocketserveur extends Thread { private transmission t; private ServerSocket transfert; public void run() { try { transfert = new ServerSocket(8188); catch (IOException e) { e.printStackTrace(); }}}

b)Client :

18

Classe test
Cette classe assure la cration dun socket afin dtablir la connexion avec le serveur. Et la cration dun autre socket qui soccupe de la transmission des fichiers entre le client et le serveur.

public class test extends javax.swing.JFrame { public static String ip; private static int port; private BufferedReader in; private String s; private PrintWriter transmettre; 19

private PrintWriter out; private Socket transmission; private Socket communication; public void connecte (String ip, int port) throws IOException { DefaultListModel model; model=new DefaultListModel(); this.ip=ip; this.port= port; jLabel1.setText("connect sur "+ip+ " Port : "+ port); this.setVisible(true); communication = new Socket(ip, port); }

3. Lecteur Vidos :
Dans cette partie nous avons cr trois classes. La premire classe hrite de la classe JPANEL et elle est implmente pour utilisation de lAPI JMF. Cette classe (panelVideo) a pour rle la cration dun Player dans l'tat realized avec la source URL et la dfinition des mthodes pour augmenter et baisser le volume, stopper, dmarrer une vido ainsi animer le progressBar ,les mthodes quon a implment sont les suivantes : Cration du Player
/ / Forcer l'utilisation de composants Manager.setHint(Manager.LIGHTWEIGHT_RENDERER, true); //creation du player dans l'etat realized avec la source URL player = Manager.createRealizedPlayer(url);

20

Contrle du volume

public float getVolume() { return player.getGainControl().getLevel(); } //attribuer une valeur float pour le volume public void setVolume(float vol) { player.getGainControl().setLevel(vol); }

Stopper et dmarrer une vido


public void Stop() { player.stop(); cpm.hide(); } public void Star() { player.start(); cpm.show(); }

Animer ProgressBar
public void starAnimation(final JProgressBar b) { tp=new Timer(); t=new TimerTask() 21

{ public void run() { f=(int)Math.round((player.getMediaTime().getSeconds()*100)/player.getDuration().getSeconds()); if(player.getMediaTime().getSeconds()==player.getDuration().getSeconds()){ f=100;//100% Stop(); stopAnimation(b); } else { //mis jour la nouvelle valeur b.setValue(f); } } }; tp.schedule(t,0,vitesse); } public void stopAnimation(JProgressBar b){ tp.cancel(); t.cancel(); //rendre progresseBar 0 b.setValue(0); }

22

Dans la deuxime classe (video.java) nous avons cr une simple interface avec laquelle lutilisateur interagit.

La dernire classe(ListPlayer.java) consiste implmenter diffrentes mthodes qui permettent lutilisateur daffiche un Dialg pour ajouter le fichier la playlist (JList), supprimer une video partir de la liste et aussi retourner son chemin et son nom et les stocker dans un tableau dynamique. Ces diffrentes mthodes sont dfinies comme suit :

23

Ajouter une vido


public void Dialog(DefaultListModel model) { JFileChooser FileCh=new JFileChooser(); FileCh.setFileFilter(filter); int r=FileCh.showOpenDialog(null); if(r==JFileChooser.APPROVE_OPTION){ try { //affecter URL le fichier vido slectionn URL url = FileCh.getSelectedFile().toURL(); String FileName = FileCh.getSelectedFile().getName(); //appel la methode pour stocker url et le nom de la video au tableau setVideo(url, FileName); //ajouter au playlist model.addElement(FileName); } catch (MalformedURLException ex) { Logger.getLogger(ListPlayer.class.getName()).log(Level.SEVERE, null, ex); } }

24

Supprimer une vido


public void removeVideo(String s) { nom.removeElement(s); Enumeration n=nom.elements(); while(n.hasMoreElements()) { String element=(String) n.nextElement(); if(element.equals(s)) { url.remove(element); break; } }} 25

Stocker le chemin et nom du la vido


public void setVideo(URL u,String s) { url.addElement(u); nom.addElement(s); }

26

Conclusion

Comme on a vu prcdemment, les sockets permettent l'tablissement d'une connexion de manire fiable et assurent l'acheminement des donnes. Le langage java nous a permit de bnficier dune large bibliothque pour traiter les mdias, JMF, qui laide du protocole RTP pourra rendre le transfert entre un client et serveur, plus important en offrant la possibilit de tlcharger dautres types de donnes, que les fichiers, qui est le transfert de mdias.

27

Vous aimerez peut-être aussi