Gestion de protocoles 1 Socket 2 Gestion de protocoles

Institut Galil´ee Master 1 PDJ
T.P. 3
Gestion de protocoles
1 Socket
Modifier l’un des programmes maˆıtre-esclave que vous avez fait `a l’exercice 2 du TP2 pour que les
noms de fichiers dont on veut calculer la signature soient donn´es au maˆıtre via un socket et non comme
arguments :
Modifiez le programme maˆıtre pour que celui-ci devienne un serveur en attente sur le port 33333
de noms de fichiers `a donner `a traiter par un esclave.
Cr´eez un programme client qui acc`ede via un socket au programme maˆıtre.
Modifiez le programme maˆıtre et le programme client pour que la connexion se fasse en mode
s´ecuris´e (SSLSocketServer et SSLSocket).
2 Gestion de protocoles
L’objectif est de mettre en place une version l´eg`ere d’un serveur FTP en utilisant un protocole
adapt´e. On veut ainsi qu’un programme client puisse faire appel `a un serveur FTP pour r´ecup´erer un
fichier :
1$ j av a - cp . Te stUR LHan dler m o nftp : // m on Logi n : m o nPa sww d@ www . ig - e du . un iv - p aris1 3 . fr ? m onF ich ier . t xt
2// p our r ´e cup´e re r le f ichi er m o nFic hier . t xt
En fait le “contenu” d’un URL va contenir non seulement le contenu du fichier recherch´e mais aussi
les informations donn´ees par l’URL. Ainsi le code client peut ˆetre :
1i mp o rt j av a . net . *;
2i mport j ava . io .*;
3i mp o rt up13 . monf tp .*;
4
5public c l a s s Tes t U RLH a n d le r {
6public static void main ( S t r i n g args []){
7S ys t em . ge tProp er t ies ( ). put (" java . protoc ol . han dl e r . pk gs " , " up13 " );
8try {
9if ( arg s . l en g th !=1)
10 error ( " Usage : java T e s t UR L H a ndl e r m o n f t p :// mon L o g i n : m o nPa s w wd@ w w w .ig - edu . univ - p a r i s 13 . f r ? mo n F i chie r " );
11
12 URL url = new URL ( a r gs [0]);
13 FT PContent ftpC on ten t = ( F TPConte nt ) u rl. g etConten t ();
14
15 System . out . p r i n t ln (" login : " + ftpC o n t e nt . g e t L o gin ( ) ) ;
16 System . out . p r i n t ln (" p a s s w d : " + ft p C o nten t . g etPas s w d ());
17 System . out . p r i n t ln (" m a c h i n e : " + ftpCont e n t . g e tMac h i n e ());
18 System . out . p r i n t ln (" f i c h i e r deman d e : " + ftp C o n tent . g etN o m F ich i e r ( ) ) ;
19 System . out . p r i n t ln (" c o n t e n u du fichie r d e m a nde : " + ftpCon t e n t . g e t F i chi e r ());
20 } catch ( Ma l for m e dU R L Ex c e pti o n ex ){ S y s t e m .out . p rintln ( ex ); e r r o r ( " B a d URL " );
21 } catch ( IOE x c e pti o n ex){ S y s t e m . out . printl n ( ex ); error (" I O E x cep t i o n oc c u r r e d ." ); }
22 }
23
24 p ublic s t at i c v oid e rror ( S tring s ){
25 S ys t em . out . print ln ( s ) ; S y stem . exit ( 1) ;
26 }
27 }
Cr´eer un r´epertoire up13/monftp dans lequel vous allez mettre les programmes de gestion de
protocole.
Cr´eez le fichier FTPContent.java. Cette classe est une structure de donn´ees avec 5 champs de
type String :login,passwd,machine,nomFichier,fichier. Mettez un constructeur et les
accesseurs.
Cr´eer le fichier Handler.java : pour que le client puisse cr´eer une instance pour une URL avec un
certain protocole (ici monftp), il faut que la classe URL acc`ede au bon gestionnaire de protocole.
La classe URL recherche une classe nomduprotocole.Handler dans les paquetages standards ou
ceux donn´es par la propri´et´e java.protocol.handler.pkgs. Donc il faut qu’il y ait une classe
Handler.java dans le r´epertoire up13/monftp/. Cette classe doit ˆetre une sous-classe de la classe
URLStreamHandler et doit avoir une m´ethode openConnection() qui retourne une instance d’une
classe sp´ecifique FTPURLConnection.
Cr´eer le fichier FTPURLConnection.java : une instance de la classe FTPURLConnection est une
instance de sa superclasse (URLConnection) avec une initialisation du gestionnaire de contenu :
1pac ka ge up13 . m onf tp ;
2
3imp or t java . net .*;
4im po rt jav a . io .*;
5
6public class F TP UR LC on ne ct io n extends U RL Co nnectio n {
7
8pub li c F TP UR LC on ne cti on ( URL url ) th ro ws M al fo rm ed UR LE xc ep ti on {
9sup er ( url );
10 setContentHandlerFactory(new FTPContentHandlerFactory());
1
11 }
12
13 public void connect () {
14 }
15
16 public In putStre am getInp ut St re am () {
17 ret urn null ;
18 }
19
20 pub lic St ri ng ge tHe ade rFi eld ( St rin g name ) {
21 if ( na me . equ al s (" content - ty pe " )) r etu rn " mon ft p ";
22 ret urn null ;
23 }
24 }
— Cr´eez un fichier FTPContentHandlerFactory.java : ce sera la fabrique de gestionnaire de
contenu : il renvoie une instance d’un gestionnaire de contenu selon le type MIME donn´e en
argument, ici il renverra une instance de la classe FTPContentHandler, quelque soit le type
MIME :
1pac ka ge up13 . m onf tp ;
2imp or t java . net .*;
3
4class FTPConte nt Ha nd lerFactor y imple ments C on tentHandlerFa ct or y {
5public FTPContentHandlerFactory() { }
6
7public Co nte nt Ha ndl er c rea teC ont ent Han dle r ( Stri ng mimeType ) {
8return new FT PC on te nt Ha ndler ();
9}
10 }
Cr´eez le fichier FTPContentHandler.java qui a comme principale m´ethode getContent() qui
en fonction de la connexion (donc de l’url) va effectuer concr`etement la requˆete et retourner une
instance de la classe FTPContent :
1p ac k age u p1 3 . monftp ;
2i mp o rt j av a . net . *;
3i mport j ava . io .*;
4
5public c l a s s FT P C o nt e n tHa n d ler extends Con t e n tHa n d ler {
6
7St ri ng l ogin =" ";
8String passwd="";
9Stri ng m ac hine = "";
10 String nomFi chier =" ";
11 Stri ng f ic hier = "";
12
13 p ub l ic O bj e ct g etCo ntent ( U RLC on n ect io n urlc ) t hr ow s I O Excep tion {
14 URL url = urlc . getURL ( );
15 S tring [ ] u se r I nfo = url . g e t Use rInf o ( ). s pl i t ( " :" );
16 login = user I n f o [0 ] ;
17 passwd = u s e r In fo [1];
18 m achine = url . getHos t ();
19 n omFic hier = url . get Qu e ry ( );
20 setFile();
21 r eturn n ew F TPCon tent ( logi n , pass wd , machin e , n omFichier , f ichier ) ;
22 }
23
24 private void setFi le ( ) throws I OExcepti on {
25 String command = new String ();
26 command = " cp " + n o mFic h i e r + " t mp . txt " ;
27 Pr oc ess p = Runtime . g et R un ti me (). exec ( command );
28 try {
29 p . waitFor ();
30 } catch ( Exce p t i o n ex ){
31 System . out . p r i n t ln ( ex ); error ( " Inter r u pt e d Ex c e pti o n o c curre d . " );
32 }
33
34 fichier="";
35 I nput St r ea m in = n ew F ile Inpu tStr eam ( " tm p . txt " );
36 int b;
37 w hile (( b = in . read ( )) ! = -1 ) {
38 f ic h ier += ( c har ) b ;
39 };
40 in . c lose ( );
41 }
42
43 p ublic s t at i c v oid e rror ( S tring s ){
44 S ys t em . out . print ln ( s ) ; S y stem . exit ( 1) ;
45 }
46 }
2
1 / 2 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !