Está en la página 1de 62
F nee nde servdios y procests oDUCCION 4.1. INTR' as auxiliares utilizados en un sistema de cony ‘Los servicios 50” Feat ty prestar st funcionslidad a les usuarios y gestions und eoleeoion eT documento a una impresora que est formandy ejemplo, cuando void main (String[] args) { new FTPClient () : rediris.es"; Nos conectamos a: ymous "> ous"; "+ sexyete) dente. connect (servPTB) ; = cliente. login (usuario, clave) p rint1n ("Login Incorrecto.., nte .disconnect() ; th; System.out.println ("Directorio actual: ” + cliente. printWorkingDire [] files = cliente. listFiles(); n("Bicheros en el directorio: + files. length); ualizar el tipo de fichero 7 hero", "Directorio" MEd rin 0; i < files. lengthy itt) i i ive sy. System.out.println(!\t" + siles[i].g¢ + tipos [files [i] gettype boolean logout = cliente. logout () ntln("Logout, deb 88% _println ("Error al cliente, disconnect ()/ " nt in ("Desconectadee "yt 176 Programacidn de servicios y process ) WT La ejecucién muestra la siguiente salida: Nos conectamos Login correcto. Directorio actual : Ficheros en el directorio actual => Directorio > Directorio ftp.rediris.es t -banner => Fichero debian => Directorio incoming 1s-1R.9z mirror => Dire outgoing pub => Direct sites => Direc welcome.msg ~ Logout del servido Desconectado.. Direct 1R => Fichero Si desde el navegador web escribimos fip.rediris.es obtendremos el indice de ficheres que se muestra en la Figura 4.2 Para movemos ‘ le un directorio a o oo hae Dewelve ire si el directorio existe, i to axes, {| metodo _changeWorkingDirecton directorio mirror/MySOLDownloads e String directorii [iS er J« aS Saree | | | | | thdice de ftp://tpredirs.e5/ Nombre Tamato ane Me Figura 4.2, Directorio principal del sitio fp.rediris.es. Si Mo existe devuelve false. Por ejemplo, si quiero it 4 Scribo lo siguiente: Ymixror/MYSOL/Downloads /"; iL te. changeWorkingDirecto; if (et3er out sprintln ("Dir Actualsmy ics sys 212° en.out -Println ("NO EXISTE Bt pie Sy j siguiente ejemplo ctea un directorio en el diye foder hacerlo) y hacemos que sea el diectoig ee jrec="NUEVODIREC"; a tory (direc) ) i nte.makeDirec' i e Fonte . changeWorkingDirectory é rind creado | (ize) ; ) eley yatem-outprint1n ("NO SE BA foprp9 CREAR on La clase FTPFile se utiliza para representarinfomacién a¢ syn servidor FTP. Algunos métodos importantes sony ei METODOS MISIONT String getName() Devuelveet nombre dl eee | Devuelve el tamafio dali (| _ Devushe ripe del ehen taieam int getType0 irectorio (DIRECTORY. CTYPE) y: (SYMBOLIC_LIM Devuelve el nombre delusuano boolean isDirectory() Devuelve te sel fichero es String getUserQ) boolean isFile() Devuelve true siesun fie boolean isSy nbolicLink() Devuelve rue sies un ent ACTIVIDAD 4.1 ; Conéctate a /ip.rediris.es y yisualiza los directorios del directorio mi directorio del directorio raiz: mostrando la lista de ficheros dees Setvidores FTP que admiten usuarios anénimos como fip.mozi : 4.3.2. Subir ficheros al servidor Fara los siguientes ejemplos necesitamos tener acceso a un Sica in hosting web gratuito que ofrezea servicio de FTP (http: WsWe? Mtp:fAvwrw.1k6.com.at/, etc), © podemos instalar el servi ene local. Puedes consultar el documento INST “neventra en los recursos del capitulo). Para g Tenet privilegi i necesitamos situa ‘S10s para ello, En primer lugar bi los ficheras, por ejemplo, suponsams que és Ht "20 yse llama NUEVODIREC: - a é ‘ubir ficheros al servidor necesitamos un UsUante: 178 Programacién de servicios y process String direc = "/NUEVODIREC" yidixec)? Gliente.changeNorkingDirectory (dire' etFileTypel) se indica el tipo de fichero a subir, Este 4 ‘ © TPO eg A continuacién con el metodo ss Bee ae cone Baa una constante entera definida en la clase FTP. Se suele pon RY_FILE Typp ce permite enviar ficheros de cualquier tipo: cliente. setFileType (FTP. BINARY_F Creamos un stream de entrada con los datos del fichero que vamos a subir (en el ciempig fichero se llama TEXTOI.nt y se ubica en la carpeta D:\CAPIT‘) y se to pasamos al meted! reFie), en ol primer pardmetro indicaremos el nombre que tend el fichero en el dicestonn sto FTP yen el segundo el InputStream: BE); Buffered: eliente.storeFile (" Por titimo seri neeesario cerrar el flujo de entrada. El ejemplo completo se muestra q n, se suben 2 ficheros al directorio NUEVODIREC (que tiene que existin), uno de ¢ le da el mismo nombre en el servidor que el que tiene actualmente: continua texto y el otro una imagen; 5 port java.io.*; import org. a} he. commons public class SubirFichero { public static void main( PTeClient cliente = new String servidor try { System.out eliente. connect (servidor) ; boolean login = cliente.login(user, pasw) ; String di. 7 (login) { cliente. changeWorkingDirectory (direc) ; cliente. setFileType (FTP.BINARY_FILE_TYPE) ; //stream de entrada con el fichero a subir = new BufferedInputStream( BufferedInputStream in = new FileInputStream("D:\\CAPIT4\\TEXTOL.txt")) j eliente.storeFile("TEXTO1.txt", in) ; //stream de entrada con el £ © a subir in = new BufferedInputStream ( new FileInputStream("D:\\CAPIT4\\Homi. jpg") ) 7 cliente.storeFile("Homi.jpg", in); che. +close(); //cerrar flujo Cliente. logout () ; //10g0 mA eliente. disconnect (); //desconexisn : i } catch (I0Exce } nes Me a gqnombrar un EDO 56 U8 ely Pat ra el fichero con éxito, en €8S0 contrarig st Thre ale Se exegey Toe ' ‘ de gsimpsonPrs ; x fichero /ODIREC/NUEVON; Ba ee eee igeWorkingDireetory (ay tec 2 rac) ; 1s fi sento.renane( ‘Lisa .png", nLiadey if stem.out -pintin ("Pichero renqueeeninDy or Ny ise ut sprintin(” e system-out -Peintin("No $6 ha pogiag yg nonber el Pi, “TE / NUEVODIREC/NUEVO/Lisa.png™} Gliente. deleteFile (direc) ) ; system.out .printin("Fichero eliminads) printin("No se ha podido ef: Amina Fichero.,. ACTIVIDAD 4.2 f Crea un directorio en tu directorio actual ETP. Sube vatios fiber al dretrin de crear. Después visualiza el contenido del directorio mostrando el nombre fichero. Prucba a renombrar y climinar ficheros, Puedes usar FilesllaSener maquina local ns 4.3.3. Descargar ficheros del servidor Para descargar un fichero del servidar en muestra disco dito tsamos retrieveFile(String remote, OutputStream local). Nevesitamos saber el dtectono) descargaremos el fichero. El método devuelve sue si el proceso se tealiza slistacion aso contrario devuelve false. Necesitaremos crear un stream de sida pars esebi nuestro disco duro. Por ejemplo para descargar el fichero de nombre TEXTO2 TST: sis & de! servidor FTP /ntdocs/NUEVODIRECINUEVO en suestt disso Su ets Yeon nombre TEXTO2nuevo.ixi, escribo lo siguientes erang cs /NUBVODIREC/NUBVO"? / cliente. changeWorkingDirectory (dizec) 7 argedo cibir el fichero) deste new pufteresoutputstreas \ \TEXTOZnuEV?: out) ) listream de salida para Bufferedoutputstream out . itiea she” Fileoutputstream ("D:\\CRETT (Cliente. ratricverile (!'TEXTO2. Ext") 180 Programacién de servicios y procesos WRecuperado correctamente... "); System. out .print1n( else a . system.out.printIn("No se ha podido descargar... "); out.close() 4.3.4. Creacién de un cliente FTP A continuacién vamos a crear un cliente sencillo desde el que podremos subir, descary eliminar ficheros; y crear y eliminar directorios 0 carpetas en nuestro sitio FTP, Como song FTP usaremos Filezilla Server instalado en nuestra maquina local. Puedes consult documento INSTALACION. FilezillaServer pdf (que se encuentra en los recursos del cep para ver como instaler y configurar en Windows el servidor FTP. Para el ejemplo se ha creado un usuario con nombre "usuario!" y clave *uswl"s se ha cr tuna carpeta en D:\xamppihtdocs de nombre usuario! y se han almacenado datos en ella, Des pantalla FileZilla Server Imerface se asigna al usuerio la cerpeia creada dindole todos permisos, véase Figura 4.3 Los datos que necesitaremos para la conexidn al seryidor FTP son el nombre del servido nombre del usuario y su clave, En el programa se han usado les siguientes variables ; almacenar estos datos y se han asignado los siguientes valores: servidor = "127.0.0.1". sex "usuariol” y pasw = "usul”. La pantalla inicial del cliente se muestra en la Figura 4.4. NOTA: Para mostrar en la consola el contenido de los mensajes comandolrespuesia que s yan originando en la comunicacion con el servidor FTP podemos usar el métod addProtoco\Commandl.istener() de la clase SocketClient. Se escribe la siguiente expresién ant de realizar la conexién al_servidor: cliente, addProtocolCommandListenertne PrintCommandLisiener (new PrintWriter (System. out))); La intertaz ProtocolCommandListene Junto con la interfaz PrintCommandListener facilita esta tarea ar y idor al ilo) ado ela los + el ara ano DF ORECTORIOS CONSTRUIDO >> Figura 4.4. Pantalla inicial del cliente FTP basieo, En Ia pantalla se muestran 5 campos de texto ne ediables nombre del servidor, el usuatio y el diretorio rai; en la pane que van surgiendo segtin vamos navegando por las ca A la derecha se muesiran 6 botones que nos permitiran crear y eliminar carpetas, y finalizar la aplicacién, En el o carpetas del directorio actual. Estos se almacenan primero en un. Para distinguir un fichero de un directorio se ha afadido a k palabra (DIR) seguida de un espacio en blanco. Al hacer elc en't automaticamente su contenido, por ejemplo, al hacer clic en contenido, véase Figura 4.5. El nombre del directorio sera el p hacer clic de nuevo en él, se visualizard el contenido del dire Se pueden observar en Ta Figura 4.6 los mensajes que ap Parte inferior. Al hacer clic en un directorio se muestra su nom Uiene, en el otro mensaje se muestra el nombre del directorio Muestra su nombre y el directorio donde esti, véase Figura 4, FICHERO seleccionado:/Fotos/P1050679.°6 DIRECTORIO ACTUAL: /Fotos: Figura 4.6. Mensejes al hacer Be laremos la variable airecInieial para ie ; trap illzaremos la navegacién, direcSelee pata SABE Eg actually ficheroSelee para saber el titime ~ © Inicializan con los siguientes valores: Static 5 Static stei J direcInicial = "Ji g direcSelec = dixectnicialy 182 Programstiondesericins y process gtabie string fichereselec ="" Fl cédigo del programa es e! siguiente, en P y variables que usa el programa: se muestran los import, y Io: 8 rimer lug ‘SMpos wing. *7 swing.event. *7 ns snet. P: import jevex import javax. import org-apache.comnor import org-apache. comno import java.io.*7 import java-awt.*7 import java.awt.ev stener; ne; public class clienteFIPBasico extends JFrame ( e fii private st //Campos de static gTex static static J Lista para los d: static Jhist (fpara satler el directorio » Static String direcSelec = q Static String ficherose], En el con istructor se inicializ Rodis icializan las vari ae del directorio inicial iz las variables, se lena la lista con los nombres de fihet0s et dicore fo as linas mis importantes con "a pantalla, Fl cédigo se muestr. ‘tinuacion, S° iectorio de trabajo iniial Le ok oo 78 conexin del cliente 1 24 continuacion, Ia obtencion de los fcheros de dicho ai PT, el establecimicn’® icho directorio, el Ilenado de la Je fiche 108 y ditectOrios, y la coloeacién deta de respuesta cuando se pulsa un botgr set ;4n detalladamente; t6n © en un //Se establece el directorio de i : trabajo actual. cliente. changeWorkingDirecto actual | ty (directnicialy- //Oteniendo ficheros y directorios a PIPFile[] files = cliente. 1istriles(); eens icheros y directorios /Jdel. directorio de trabajo actual» llenazLista (files, directnicial); //preparar campos de pantalla : campo. setText ("<< ARBOL DE DIRECTOREOS GONSTRUIDO | os cab.setText ("Servidor PIP: "+servider); setText ("Usuario: "tuser); setText ("DIRECTORIO RAIZ:; "tdirecinicial //preparacién de la lista //se configura el tipo de seleccion para quelson Jf eccionar un elemento de la liste lis irec. setSelectionMode (bistSelectionModels ‘SINGLE! //barra de desplazamiento pera ta lista le barraDesplazamiento = new ‘dSerolPane( Des: Z. . setPreferredSize ost iei

También podría gustarte