SlideShare una empresa de Scribd logo
CREATED BY IVAN LUIS JIMENEZ
PRACTICA 1: SERVIDOR DE ARCHIVOS CON
RPC (LLAMADAS A PROCEDIMIENTOS
REMOTOS)
ALUMNO: IVAN LUIS JIMENEZ
UNIVERSIDAD AUTÓNOMA METROPOLITANA
CODIGO CLIENTE
package clienteenvarch;
java.awt.Desktop;
import java.net.*;
import java.io.*;
public class EnviarArchivo {
/*
*atributos para manejar salida y entrada de texto
*/
BufferedReader delTeclado;
DataOutputStream alservidor;
FileInputStream entrada;
/*
*atributos para manejar entrada de archivos
*/
ObjectInputStream ois = null;
ObjectOutputStream oos = null;
boolean respuesta = false;
int tam = 0;
String nombreArchivo = null;
//Metodo iniciar el servidor cliente
public void iniciar() {
try {
Socket yo = new Socket("172.24.98.235", 5432);
delTeclado = new BufferedReader(new InputStreamReader(System.in));
alservidor = new DataOutputStream(yo.getOutputStream());
DataInputStream delServidor = new DataInputStream(yo.getInputStream());
escribir("Teclee el nombre del archivo:");
String el = delTeclado.readLine();
alservidor.writeUTF(el);
respuesta = delServidor.readBoolean();
if (respuesta == true) {
escribir("[Servidor]" + delServidor.readUTF());
escribir("[Servidor]:" + delServidor.readUTF());
tam = delServidor.readInt();
nombreArchivo = delServidor.readUTF();
DataInputStream ois = new DataInputStream(yo.getInputStream());
FileOutputStream destino = new FileOutputStream("C:UsersFrancisco
AguilarDownloadsCompressedClienteEnvArchdestino" + nombreArchivo);
BufferedOutputStream out = new BufferedOutputStream(destino);
BufferedInputStream in = new BufferedInputStream(yo.getInputStream());
// Creamos el array de bytes para leer los datos del archivo
byte[] buffer = new byte[tam];
// Obtenemos el archivo mediante la lectura de bytes enviados
for (int i = 0; i < buffer.length; i++) {
buffer[i] = (byte) in.read();
}
// Escribimos el archivo
out.write(buffer);
escribir("Se recivio el archivo");
abrir_archivo();
//Cerramos flujos
out.flush();
out.flush();
in.close();
out.close();
yo.close();
} else {
escribir("[Servidor]" + delServidor.readUTF());
yo.close();
}
} catch (Exception e) {
System.out.println("error " + e.getMessage() + " cliente");
}
}
public static void main(String args[]) {
EnviarArchivo ea = new EnviarArchivo();
ea.iniciar();
}
public static void escribir(String txt) {
System.out.println(txt);
}
public void abrir_archivo() {
try {
//cambiar la direccion para cada computadora
File objetofile = new File("C:UsersFrancisco
AguilarDownloadsCompressedClienteEnvArchdestino" + nombreArchivo);
Desktop.getDesktop().open(objetofile);
} catch (IOException ex) {
System.out.println(ex);
}
}
}
CODIGO SERVIDOR CONCURRENTE
package demoserver;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Date;
import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author Ivan Luis Jimenez
*/
public class DemoServer {
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws IOException, InterruptedException {
Socket s = null;
ServerSocket ss = null;
Tarea ob;
int id = 0;
try {
ss = new ServerSocket(5432);
do {
Tarea.escribir("Socket escuchando en puerto 5432");
s = ss.accept();
id++;
Tarea.escribir("nSe conecto el cliente No." + id + " desde la IP: " +
s.getInetAddress());
Tarea.escribir("**************************************************");
//(new Tarea(s, id)).start();
ob = new Tarea(s, id);
//ob.join();
ob.start();
if (ob.isAlive() == false) {
ss.close();
}
} while (ob.isAlive());
} catch (IOException e) {
Tarea.escribir(e.getMessage() + " [servidor]");
System.exit(3);
} finally {
try {
ss.close();
} catch (IOException e) {
Tarea.escribir(e.getMessage() + " [servidor]");
System.exit(4);
}
}
}
static class Tarea extends Thread {
int id;
Socket s = null;
/*
*Atributos para manejar salida y entrada de texto
*/
ObjectInputStream ois = null;
ObjectOutputStream oos = null;
DataInputStream entradaCliente = null;
DataOutputStream salidaCliente = null;
/*
*Atributos para manejar salida de archivos
*/
File archivo = null;
long tiempoinicio = 0;
long tiempofinal= 0;
long tiempo_total=0;
long initialTime;
private Tarea(Socket socket, int id) {
this.s = socket;
this.id = id;
}
boolean checar(String nombre) {
archivo = new File("C:UsersJonyDesktopTOOLTrimestre I UAMSistemas
Distribuidos2. Servidores multiprocesos, concurrentes y
multihilosServidorEnvioArchMultihiloServidorEnvioArchMultihiloorigen" + nombre);
if (archivo.exists()) {
return true;
} else {
return false;
}
}
public void run() {
try {
entradaCliente = new DataInputStream(s.getInputStream());
salidaCliente = new DataOutputStream(s.getOutputStream());
String nombreArchivo = entradaCliente.readUTF();
if (checar(nombreArchivo) == true) {
tiempoinicio=(System.currentTimeMillis() - this.initialTime);
System.out.println("El cliente :" + id + " comienza la transferencia
EN EL TIEMPO: "
+ (System.currentTimeMillis() - this.initialTime)
+ " milisegundos");
salidaCliente.writeBoolean(true);
salidaCliente.writeUTF("SI existe el archivo:" + nombreArchivo + " en
el servidor");
salidaCliente.writeUTF("Tamaño del archivo:" + (archivo.length() /
1024) + " KB | Nombre:" + archivo.getName());
salidaCliente.writeInt((int) archivo.length());
salidaCliente.writeUTF(nombreArchivo);
escribir("Enviando archivo:" + nombreArchivo + " a " +
s.getInetAddress());
FileInputStream entrada = new FileInputStream(archivo);
BufferedInputStream leerArch = new BufferedInputStream(entrada);
// Creamos el flujo de salida
BufferedOutputStream salida = new
BufferedOutputStream(s.getOutputStream());
// Creamos un array de tipo byte
byte[] arreglo = new byte[(int) archivo.length()];
// Leemos el archivo y lo introducimos en el array de bytes
leerArch.read(arreglo);
// Realizamos el envio de los bytes que conforman el archivo
for (int i = 0; i < arreglo.length; i++) {
salida.write(arreglo[i]);
}
tiempofinal=(System.currentTimeMillis() - this.initialTime);
tiempo_total=tiempofinal-tiempoinicio;
escribir("Archivo Enviado a cliente:" + id);
System.out.println("El servidor termino con cliente" + id + " EN UN
TIEMPO DE: "
+ tiempo_total + " milisegundos");
System.out.println("Tiempo del cliente "+id +":
("+(System.currentTimeMillis() - this.initialTime)+") milisegundos");
salida.flush();
salida.flush();
salida.close();
entrada.close();
//escribir("Tiempo de envio:"+"("+(t0-t1)+")"+" milisegundos");
}
if (checar(nombreArchivo) == false) {
salidaCliente.writeBoolean(false);
salidaCliente.writeUTF("NO existe el archivo:" + nombreArchivo + " en
el servidor");
escribir("se envio respuesta al cliente");
}
} catch (Exception ex) {
escribir(ex.getMessage() + " id:" + id);
} finally {
try {
if (oos != null) {
oos.close();
}
if (ois != null) {
ois.close();
}
if (s != null) {
s.close();
}
System.out.println("Termino proceso para cliente: " + id);
} catch (Exception e) {
System.out.println(e.getMessage() + " [servidor]");
}
}
}
public static void escribir(String txt) {
System.out.println(txt);
}
}
}
CODIGO SERVIDOR SECUENCIAL
package demoserver;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
/**
*
* @author Ivan Luis Jimenez
*/
public class DemoServer {
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws IOException, InterruptedException {
Socket s = null;
ServerSocket ss = null;
Tarea ob;
int id = 0;
try {
ss = new ServerSocket(5432);
while(true){
Tarea.escribir("Socket escuchando en puerto 5432");
s = ss.accept();
id++;
Tarea.escribir("nSe conecto el cliente No." + id + " desde la IP: " +
s.getInetAddress());
Tarea.escribir("**************************************************");
//(new Tarea(s, id)).start();
ob = new Tarea(s, id);
//ob.join();
ob.start();
ob.join();
}
} catch (IOException e) {
Tarea.escribir(e.getMessage() + " [servidor]");
System.exit(3);
} finally {
}
}
static class Tarea extends Thread {
int id;
Socket s = null;
/*
*Atributos para manejar salida y entrada de texto
*/
ObjectInputStream ois = null;
ObjectOutputStream oos = null;
DataInputStream entradaCliente = null;
DataOutputStream salidaCliente = null;
/*
*Atributos para manejar salida de archivos
*/
File archivo = null;
long tiempoinicio = 0;
long tiempofinal= 0;
long tiempo_total=0;
long initialTime;
private Tarea(Socket socket, int id) {
this.s = socket;
this.id = id;
}
boolean checar(String nombre) {
archivo = new File("C:UsersJonyDesktopTOOLTrimestre I UAMSistemas
Distribuidos2. Servidores multiprocesos, concurrentes y
multihilosServidorEnvioArchMultihiloServidorEnvioArchMultihiloorigen" + nombre);
if (archivo.exists()) {
return true;
} else {
return false;
}
}
public void run() {
try {
entradaCliente = new DataInputStream(s.getInputStream());
salidaCliente = new DataOutputStream(s.getOutputStream());
String nombreArchivo = entradaCliente.readUTF();
if (checar(nombreArchivo) == true) {
tiempoinicio=(System.currentTimeMillis() - this.initialTime);
System.out.println("El cliente :" + id + " comienza la transferencia
EN EL TIEMPO: "
+ (System.currentTimeMillis() - this.initialTime)
+ " milisegundos");
salidaCliente.writeBoolean(true);
salidaCliente.writeUTF("SI existe el archivo:" + nombreArchivo + " en
el servidor");
salidaCliente.writeUTF("Tamaño del archivo:" + (archivo.length() /
1024) + " KB | Nombre:" + archivo.getName());
salidaCliente.writeInt((int) archivo.length());
salidaCliente.writeUTF(nombreArchivo);
escribir("Enviando archivo:" + nombreArchivo + " a " +
s.getInetAddress());
FileInputStream entrada = new FileInputStream(archivo);
BufferedInputStream leerArch = new BufferedInputStream(entrada);
// Creamos el flujo de salida
BufferedOutputStream salida = new
BufferedOutputStream(s.getOutputStream());
// Creamos un array de tipo byte
byte[] arreglo = new byte[(int) archivo.length()];
// Leemos el archivo y lo introducimos en el array de bytes
leerArch.read(arreglo);
// Realizamos el envio de los bytes que conforman el archivo
for (int i = 0; i < arreglo.length; i++) {
salida.write(arreglo[i]);
}
tiempofinal=(System.currentTimeMillis() - this.initialTime);
tiempo_total=tiempofinal-tiempoinicio;
escribir("Archivo Enviado a cliente:" + id);
System.out.println("El servidor termino con cliente" + id + " EN UN
TIEMPO DE: "
+ tiempo_total + " milisegundos");
System.out.println("Tiempo del cliente "+id +":
("+(System.currentTimeMillis() - this.initialTime)+") milisegundos");
salida.flush();
salida.flush();
salida.close();
entrada.close();
//escribir("Tiempo de envio:"+"("+(t0-t1)+")"+" milisegundos");
}
if (checar(nombreArchivo) == false) {
salidaCliente.writeBoolean(false);
salidaCliente.writeUTF("NO existe el archivo:" + nombreArchivo + " en
el servidor");
escribir("se envio respuesta al cliente");
}
} catch (Exception ex) {
escribir(ex.getMessage() + " id:" + id);
} finally {
try {
if (oos != null) {
oos.close();
}
if (ois != null) {
ois.close();
}
if (s != null) {
s.close();
}
System.out.println("Termino proceso para cliente: " + id);
} catch (Exception e) {
System.out.println(e.getMessage() + " [servidor]");
}
}
}
public static void escribir(String txt) {
System.out.println(txt);
}
}
}
Capturas Cliente-Servidor concurrente
1. Ejecutando cliente (el servidor ya ha sido iniciado)
2. Ejecución y escritura del
3. Se inician los procesos en paralelo
4. Se recibieron todos los archivos a la carpeta destino
Capturas Cliente-Servidor secuencial
1. Ejecución de los cliente (ya ha sido iniciado el servidor)
2. Escribimos el nombre del archivo a solicitar, escribimos uno que no existe, y
veremos el resultado. Se enviara el archivo uno tras otro.
Y en el servidor tenemos:
En el caso del archivo que no existe:
Muestra mensaje que no existe:

Más contenido relacionado

La actualidad más candente

Programación MySQL-Ejercicios
Programación MySQL-EjerciciosProgramación MySQL-Ejercicios
Programación MySQL-Ejercicios
testgrupocomex
 
Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.
Giancarlo Aguilar
 
Transacciones y manejo de errores en mysql
Transacciones y manejo de errores en mysqlTransacciones y manejo de errores en mysql
Transacciones y manejo de errores en mysql
Victor Dolores Marcos
 
Planificación y modelado del sistema de una pizzeria.
Planificación y modelado del sistema de una pizzeria.Planificación y modelado del sistema de una pizzeria.
Planificación y modelado del sistema de una pizzeria.
Luis Cigarroa
 
Archivos secuenciales-indexados C++
Archivos secuenciales-indexados C++Archivos secuenciales-indexados C++
Archivos secuenciales-indexados C++
EdsonRc
 

La actualidad más candente (20)

Aplicaciòn de las estructuras de datos
Aplicaciòn de las estructuras de datosAplicaciòn de las estructuras de datos
Aplicaciòn de las estructuras de datos
 
Proyecto de compiladores Sentencia While con Java CUP y JFLEX
Proyecto de compiladores Sentencia While con Java CUP y JFLEXProyecto de compiladores Sentencia While con Java CUP y JFLEX
Proyecto de compiladores Sentencia While con Java CUP y JFLEX
 
Colas
ColasColas
Colas
 
Programación MySQL-Ejercicios
Programación MySQL-EjerciciosProgramación MySQL-Ejercicios
Programación MySQL-Ejercicios
 
Unidad 2: Clases y objetos Ejercicio 3
Unidad 2: Clases y objetos Ejercicio 3Unidad 2: Clases y objetos Ejercicio 3
Unidad 2: Clases y objetos Ejercicio 3
 
Clases Genéricas en Java
Clases Genéricas en JavaClases Genéricas en Java
Clases Genéricas en Java
 
Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.
 
Listas como estructura de datos..
Listas como estructura de datos..Listas como estructura de datos..
Listas como estructura de datos..
 
Transacciones y manejo de errores en mysql
Transacciones y manejo de errores en mysqlTransacciones y manejo de errores en mysql
Transacciones y manejo de errores en mysql
 
Automatas Finitos Deterministicos y No Deterministicos
Automatas Finitos Deterministicos y No DeterministicosAutomatas Finitos Deterministicos y No Deterministicos
Automatas Finitos Deterministicos y No Deterministicos
 
Analizador Léxico en C++
Analizador Léxico en C++Analizador Léxico en C++
Analizador Léxico en C++
 
Manual sql server parte 1
Manual sql server parte 1Manual sql server parte 1
Manual sql server parte 1
 
Cuadro comparativo algoritmos de ordenamiento
Cuadro comparativo algoritmos de ordenamientoCuadro comparativo algoritmos de ordenamiento
Cuadro comparativo algoritmos de ordenamiento
 
Ejercicio 2 transacciones
Ejercicio 2 transaccionesEjercicio 2 transacciones
Ejercicio 2 transacciones
 
Planificación y modelado del sistema de una pizzeria.
Planificación y modelado del sistema de una pizzeria.Planificación y modelado del sistema de una pizzeria.
Planificación y modelado del sistema de una pizzeria.
 
Archivos secuenciales-indexados C++
Archivos secuenciales-indexados C++Archivos secuenciales-indexados C++
Archivos secuenciales-indexados C++
 
Inserción,borrado y búsqueda en Arboles Binarios(Java)
Inserción,borrado y búsqueda en Arboles Binarios(Java)Inserción,borrado y búsqueda en Arboles Binarios(Java)
Inserción,borrado y búsqueda en Arboles Binarios(Java)
 
Portafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regulares
Portafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regularesPortafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regulares
Portafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regulares
 
Ejercicios resueltos de programacion
Ejercicios resueltos de programacionEjercicios resueltos de programacion
Ejercicios resueltos de programacion
 
Tópicos Avanzados de Programación - Unidad 4 Acceso a datos
Tópicos Avanzados de Programación - Unidad 4 Acceso a datosTópicos Avanzados de Programación - Unidad 4 Acceso a datos
Tópicos Avanzados de Programación - Unidad 4 Acceso a datos
 

Similar a Ejemplo de RPC (Servidor de Archivos) enviar archivo en Java utilizando RPC

Ejercicios en Netbeans
Ejercicios en NetbeansEjercicios en Netbeans
Ejercicios en Netbeans
edgar muñoz
 
Ejerciciosdeprogramacionconcurrente 111021172712-phpapp01
Ejerciciosdeprogramacionconcurrente 111021172712-phpapp01Ejerciciosdeprogramacionconcurrente 111021172712-phpapp01
Ejerciciosdeprogramacionconcurrente 111021172712-phpapp01
cursobeta
 
Sockets en c
Sockets en cSockets en c
Sockets en c
MaShYy
 

Similar a Ejemplo de RPC (Servidor de Archivos) enviar archivo en Java utilizando RPC (20)

Sockets
SocketsSockets
Sockets
 
Ejercicios en Netbeans
Ejercicios en NetbeansEjercicios en Netbeans
Ejercicios en Netbeans
 
Ejerciciosdeprogramacionconcurrente 111021172712-phpapp01
Ejerciciosdeprogramacionconcurrente 111021172712-phpapp01Ejerciciosdeprogramacionconcurrente 111021172712-phpapp01
Ejerciciosdeprogramacionconcurrente 111021172712-phpapp01
 
Creacion de proyecto_en_netbeans
Creacion de proyecto_en_netbeansCreacion de proyecto_en_netbeans
Creacion de proyecto_en_netbeans
 
Desarrollo de programas_ejemplos_01
Desarrollo de programas_ejemplos_01Desarrollo de programas_ejemplos_01
Desarrollo de programas_ejemplos_01
 
Desarrollo De Programas Ejemplos 01
Desarrollo De Programas Ejemplos 01Desarrollo De Programas Ejemplos 01
Desarrollo De Programas Ejemplos 01
 
Lw2010 - Uso De La Programacion En Linux Para La Seguridad En Redes
Lw2010 - Uso De La Programacion En Linux Para La Seguridad En RedesLw2010 - Uso De La Programacion En Linux Para La Seguridad En Redes
Lw2010 - Uso De La Programacion En Linux Para La Seguridad En Redes
 
Lw2010 Pedro Valera
Lw2010 Pedro ValeraLw2010 Pedro Valera
Lw2010 Pedro Valera
 
Entrada De Datos
Entrada De DatosEntrada De Datos
Entrada De Datos
 
Programación web con JSP
Programación web con JSPProgramación web con JSP
Programación web con JSP
 
Sockets en c
Sockets en cSockets en c
Sockets en c
 
Ejemplos programacion socket java
Ejemplos programacion socket javaEjemplos programacion socket java
Ejemplos programacion socket java
 
Sockets/ tcp
Sockets/ tcpSockets/ tcp
Sockets/ tcp
 
Multitarea e hilos en java con ejemplos
Multitarea e hilos en java con ejemplosMultitarea e hilos en java con ejemplos
Multitarea e hilos en java con ejemplos
 
Tema servlets
Tema servletsTema servlets
Tema servlets
 
Tema servlets
Tema servletsTema servlets
Tema servlets
 
Tema servlets
Tema servletsTema servlets
Tema servlets
 
Tema servlets
Tema servletsTema servlets
Tema servlets
 
Serialización personalizada
Serialización personalizadaSerialización personalizada
Serialización personalizada
 
Clase 21 programacion ejb 3.0
Clase 21 programacion ejb 3.0Clase 21 programacion ejb 3.0
Clase 21 programacion ejb 3.0
 

Más de Ivan Luis Jimenez

Más de Ivan Luis Jimenez (14)

PelicanHPC Implementación fisica con dos nodos
PelicanHPC Implementación fisica con dos nodosPelicanHPC Implementación fisica con dos nodos
PelicanHPC Implementación fisica con dos nodos
 
Métodos en Java-Con ejemplos
Métodos en Java-Con ejemplosMétodos en Java-Con ejemplos
Métodos en Java-Con ejemplos
 
Aplicación de los Clusters en la empresas (Amazon Redshift)
Aplicación de los Clusters en la empresas (Amazon Redshift)Aplicación de los Clusters en la empresas (Amazon Redshift)
Aplicación de los Clusters en la empresas (Amazon Redshift)
 
Manipulación del contraste de una imágen monocromática por transformación exp...
Manipulación del contraste de una imágen monocromática por transformación exp...Manipulación del contraste de una imágen monocromática por transformación exp...
Manipulación del contraste de una imágen monocromática por transformación exp...
 
Ejemplo de Makefile en LINUX con lenguaje C compilando HolaMundo
Ejemplo de Makefile en LINUX con lenguaje C compilando HolaMundoEjemplo de Makefile en LINUX con lenguaje C compilando HolaMundo
Ejemplo de Makefile en LINUX con lenguaje C compilando HolaMundo
 
Ejemplo práctico de uso de Makefile en LINUX (Compilando modulos de holamundo...
Ejemplo práctico de uso de Makefile en LINUX (Compilando modulos de holamundo...Ejemplo práctico de uso de Makefile en LINUX (Compilando modulos de holamundo...
Ejemplo práctico de uso de Makefile en LINUX (Compilando modulos de holamundo...
 
Comandos básicos para crear VLANs
Comandos básicos para crear  VLANsComandos básicos para crear  VLANs
Comandos básicos para crear VLANs
 
Enrutamiento Dinámico con RIPv1 y RIPv2
Enrutamiento Dinámico con RIPv1 y RIPv2Enrutamiento Dinámico con RIPv1 y RIPv2
Enrutamiento Dinámico con RIPv1 y RIPv2
 
Práctica: Medición de voltaje en circuitos con dos fuentes de voltaje
Práctica: Medición de voltaje en circuitos con dos fuentes de voltajePráctica: Medición de voltaje en circuitos con dos fuentes de voltaje
Práctica: Medición de voltaje en circuitos con dos fuentes de voltaje
 
Creación de VLANs (subredes) desde Cisco Packet Tracer Student
Creación de VLANs (subredes) desde Cisco Packet Tracer StudentCreación de VLANs (subredes) desde Cisco Packet Tracer Student
Creación de VLANs (subredes) desde Cisco Packet Tracer Student
 
Configurando Ambiente de Desarrollo WEB en Eclipse Neón para Desarrolladores
Configurando Ambiente de Desarrollo WEB en Eclipse Neón para DesarrolladoresConfigurando Ambiente de Desarrollo WEB en Eclipse Neón para Desarrolladores
Configurando Ambiente de Desarrollo WEB en Eclipse Neón para Desarrolladores
 
Practica- Transacciones y Concurrencia en Oracle y MySQL
Practica- Transacciones y Concurrencia en Oracle y MySQLPractica- Transacciones y Concurrencia en Oracle y MySQL
Practica- Transacciones y Concurrencia en Oracle y MySQL
 
Conexión remota a base de datos con Oracle y MySQL
Conexión remota a base de datos con Oracle y MySQLConexión remota a base de datos con Oracle y MySQL
Conexión remota a base de datos con Oracle y MySQL
 
Acceso a una base de datos mediante un servidor (Conexión a oracle y mysql)
Acceso a una base de datos mediante un servidor (Conexión a oracle y mysql)Acceso a una base de datos mediante un servidor (Conexión a oracle y mysql)
Acceso a una base de datos mediante un servidor (Conexión a oracle y mysql)
 

Último

Último (20)

Power Point: Luz desde el santuario.pptx
Power Point: Luz desde el santuario.pptxPower Point: Luz desde el santuario.pptx
Power Point: Luz desde el santuario.pptx
 
Módulo No. 1 Salud mental y escucha activa FINAL 25ABR2024 técnicos.pptx
Módulo No. 1 Salud mental y escucha activa FINAL 25ABR2024 técnicos.pptxMódulo No. 1 Salud mental y escucha activa FINAL 25ABR2024 técnicos.pptx
Módulo No. 1 Salud mental y escucha activa FINAL 25ABR2024 técnicos.pptx
 
Orientación Académica y Profesional 4º de ESO- OrientArte
Orientación Académica y Profesional 4º de ESO- OrientArteOrientación Académica y Profesional 4º de ESO- OrientArte
Orientación Académica y Profesional 4º de ESO- OrientArte
 
6.Deícticos Dos_Enfermería_EspanolAcademico
6.Deícticos Dos_Enfermería_EspanolAcademico6.Deícticos Dos_Enfermería_EspanolAcademico
6.Deícticos Dos_Enfermería_EspanolAcademico
 
ensayo literario rios profundos jose maria ARGUEDAS
ensayo literario rios profundos jose maria ARGUEDASensayo literario rios profundos jose maria ARGUEDAS
ensayo literario rios profundos jose maria ARGUEDAS
 
Presentación Pedagoía medieval para exposición en clases
Presentación Pedagoía medieval para exposición en clasesPresentación Pedagoía medieval para exposición en clases
Presentación Pedagoía medieval para exposición en clases
 
ESTEREOTIPOS Y ROLES DE GÉNERO (labor de grupo)
ESTEREOTIPOS  Y ROLES DE GÉNERO (labor de grupo)ESTEREOTIPOS  Y ROLES DE GÉNERO (labor de grupo)
ESTEREOTIPOS Y ROLES DE GÉNERO (labor de grupo)
 
ESTEREOTIPOS DE GÉNERO A LAS PERSONAS? (Grupo)
ESTEREOTIPOS DE GÉNERO A LAS PERSONAS? (Grupo)ESTEREOTIPOS DE GÉNERO A LAS PERSONAS? (Grupo)
ESTEREOTIPOS DE GÉNERO A LAS PERSONAS? (Grupo)
 
Cerebelo Anatomía y fisiología Clase presencial
Cerebelo Anatomía y fisiología Clase presencialCerebelo Anatomía y fisiología Clase presencial
Cerebelo Anatomía y fisiología Clase presencial
 
Análisis de la situación actual .La Matriz de Perfil Competitivo (MPC)
Análisis de la situación actual .La Matriz de Perfil Competitivo (MPC)Análisis de la situación actual .La Matriz de Perfil Competitivo (MPC)
Análisis de la situación actual .La Matriz de Perfil Competitivo (MPC)
 
ACERTIJO LA RUTA DE LAS ADIVINANZAS OLÍMPICAS. Por JAVIER SOLIS NOYOLA
ACERTIJO LA RUTA DE LAS ADIVINANZAS OLÍMPICAS. Por JAVIER SOLIS NOYOLAACERTIJO LA RUTA DE LAS ADIVINANZAS OLÍMPICAS. Por JAVIER SOLIS NOYOLA
ACERTIJO LA RUTA DE LAS ADIVINANZAS OLÍMPICAS. Por JAVIER SOLIS NOYOLA
 
PRESENTACION DE LA SEMANA NUMERO 8 EN APLICACIONES DE INTERNET
PRESENTACION DE LA SEMANA NUMERO 8 EN APLICACIONES DE INTERNETPRESENTACION DE LA SEMANA NUMERO 8 EN APLICACIONES DE INTERNET
PRESENTACION DE LA SEMANA NUMERO 8 EN APLICACIONES DE INTERNET
 
32 LECTURAS CORTAS PARA NIÑOS.pdf · versión 1.pdf
32 LECTURAS CORTAS PARA NIÑOS.pdf · versión 1.pdf32 LECTURAS CORTAS PARA NIÑOS.pdf · versión 1.pdf
32 LECTURAS CORTAS PARA NIÑOS.pdf · versión 1.pdf
 
BIENESTAR TOTAL - LA EXPERIENCIA DEL CLIENTE CON ATR
BIENESTAR TOTAL - LA EXPERIENCIA DEL CLIENTE CON ATRBIENESTAR TOTAL - LA EXPERIENCIA DEL CLIENTE CON ATR
BIENESTAR TOTAL - LA EXPERIENCIA DEL CLIENTE CON ATR
 
Diagnostico del corregimiento de Junin del municipio de Barbacoas
Diagnostico del corregimiento de Junin del municipio de BarbacoasDiagnostico del corregimiento de Junin del municipio de Barbacoas
Diagnostico del corregimiento de Junin del municipio de Barbacoas
 
Material-de-Apoyo-Escuela-Sabatica-02-2-2024.pptx.ppt
Material-de-Apoyo-Escuela-Sabatica-02-2-2024.pptx.pptMaterial-de-Apoyo-Escuela-Sabatica-02-2-2024.pptx.ppt
Material-de-Apoyo-Escuela-Sabatica-02-2-2024.pptx.ppt
 
Proceso de gestión de obras - Aquí tu Remodelación
Proceso de gestión de obras - Aquí tu RemodelaciónProceso de gestión de obras - Aquí tu Remodelación
Proceso de gestión de obras - Aquí tu Remodelación
 
Fase 2, Pensamiento variacional y trigonometrico
Fase 2, Pensamiento variacional y trigonometricoFase 2, Pensamiento variacional y trigonometrico
Fase 2, Pensamiento variacional y trigonometrico
 
Evaluación de los Factores Internos de la Organización
Evaluación de los Factores Internos de la OrganizaciónEvaluación de los Factores Internos de la Organización
Evaluación de los Factores Internos de la Organización
 
PROYECTO INTEGRADOR ARCHIDUQUE. presentacion
PROYECTO INTEGRADOR ARCHIDUQUE. presentacionPROYECTO INTEGRADOR ARCHIDUQUE. presentacion
PROYECTO INTEGRADOR ARCHIDUQUE. presentacion
 

Ejemplo de RPC (Servidor de Archivos) enviar archivo en Java utilizando RPC

  • 1. CREATED BY IVAN LUIS JIMENEZ PRACTICA 1: SERVIDOR DE ARCHIVOS CON RPC (LLAMADAS A PROCEDIMIENTOS REMOTOS) ALUMNO: IVAN LUIS JIMENEZ UNIVERSIDAD AUTÓNOMA METROPOLITANA
  • 2. CODIGO CLIENTE package clienteenvarch; java.awt.Desktop; import java.net.*; import java.io.*; public class EnviarArchivo { /* *atributos para manejar salida y entrada de texto */ BufferedReader delTeclado; DataOutputStream alservidor; FileInputStream entrada; /* *atributos para manejar entrada de archivos */ ObjectInputStream ois = null; ObjectOutputStream oos = null; boolean respuesta = false; int tam = 0; String nombreArchivo = null; //Metodo iniciar el servidor cliente public void iniciar() { try { Socket yo = new Socket("172.24.98.235", 5432); delTeclado = new BufferedReader(new InputStreamReader(System.in)); alservidor = new DataOutputStream(yo.getOutputStream()); DataInputStream delServidor = new DataInputStream(yo.getInputStream()); escribir("Teclee el nombre del archivo:"); String el = delTeclado.readLine(); alservidor.writeUTF(el); respuesta = delServidor.readBoolean(); if (respuesta == true) { escribir("[Servidor]" + delServidor.readUTF()); escribir("[Servidor]:" + delServidor.readUTF()); tam = delServidor.readInt(); nombreArchivo = delServidor.readUTF(); DataInputStream ois = new DataInputStream(yo.getInputStream()); FileOutputStream destino = new FileOutputStream("C:UsersFrancisco AguilarDownloadsCompressedClienteEnvArchdestino" + nombreArchivo); BufferedOutputStream out = new BufferedOutputStream(destino); BufferedInputStream in = new BufferedInputStream(yo.getInputStream());
  • 3. // Creamos el array de bytes para leer los datos del archivo byte[] buffer = new byte[tam]; // Obtenemos el archivo mediante la lectura de bytes enviados for (int i = 0; i < buffer.length; i++) { buffer[i] = (byte) in.read(); } // Escribimos el archivo out.write(buffer); escribir("Se recivio el archivo"); abrir_archivo(); //Cerramos flujos out.flush(); out.flush(); in.close(); out.close(); yo.close(); } else { escribir("[Servidor]" + delServidor.readUTF()); yo.close(); } } catch (Exception e) { System.out.println("error " + e.getMessage() + " cliente"); } } public static void main(String args[]) { EnviarArchivo ea = new EnviarArchivo(); ea.iniciar(); } public static void escribir(String txt) { System.out.println(txt); } public void abrir_archivo() { try { //cambiar la direccion para cada computadora File objetofile = new File("C:UsersFrancisco AguilarDownloadsCompressedClienteEnvArchdestino" + nombreArchivo); Desktop.getDesktop().open(objetofile); } catch (IOException ex) { System.out.println(ex); } } }
  • 4.
  • 5. CODIGO SERVIDOR CONCURRENTE package demoserver; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.net.ServerSocket; import java.net.Socket; import java.util.Date; import java.util.concurrent.TimeUnit; import java.util.logging.Level; import java.util.logging.Logger; /** * * @author Ivan Luis Jimenez */ public class DemoServer { /** * @param args the command line arguments */ public static void main(String[] args) throws IOException, InterruptedException { Socket s = null; ServerSocket ss = null; Tarea ob; int id = 0; try { ss = new ServerSocket(5432); do { Tarea.escribir("Socket escuchando en puerto 5432"); s = ss.accept(); id++; Tarea.escribir("nSe conecto el cliente No." + id + " desde la IP: " + s.getInetAddress()); Tarea.escribir("**************************************************"); //(new Tarea(s, id)).start(); ob = new Tarea(s, id); //ob.join(); ob.start(); if (ob.isAlive() == false) {
  • 6. ss.close(); } } while (ob.isAlive()); } catch (IOException e) { Tarea.escribir(e.getMessage() + " [servidor]"); System.exit(3); } finally { try { ss.close(); } catch (IOException e) { Tarea.escribir(e.getMessage() + " [servidor]"); System.exit(4); } } } static class Tarea extends Thread { int id; Socket s = null; /* *Atributos para manejar salida y entrada de texto */ ObjectInputStream ois = null; ObjectOutputStream oos = null; DataInputStream entradaCliente = null; DataOutputStream salidaCliente = null; /* *Atributos para manejar salida de archivos */ File archivo = null; long tiempoinicio = 0; long tiempofinal= 0; long tiempo_total=0; long initialTime; private Tarea(Socket socket, int id) { this.s = socket; this.id = id; } boolean checar(String nombre) { archivo = new File("C:UsersJonyDesktopTOOLTrimestre I UAMSistemas Distribuidos2. Servidores multiprocesos, concurrentes y multihilosServidorEnvioArchMultihiloServidorEnvioArchMultihiloorigen" + nombre); if (archivo.exists()) { return true; } else {
  • 7. return false; } } public void run() { try { entradaCliente = new DataInputStream(s.getInputStream()); salidaCliente = new DataOutputStream(s.getOutputStream()); String nombreArchivo = entradaCliente.readUTF(); if (checar(nombreArchivo) == true) { tiempoinicio=(System.currentTimeMillis() - this.initialTime); System.out.println("El cliente :" + id + " comienza la transferencia EN EL TIEMPO: " + (System.currentTimeMillis() - this.initialTime) + " milisegundos"); salidaCliente.writeBoolean(true); salidaCliente.writeUTF("SI existe el archivo:" + nombreArchivo + " en el servidor"); salidaCliente.writeUTF("Tamaño del archivo:" + (archivo.length() / 1024) + " KB | Nombre:" + archivo.getName()); salidaCliente.writeInt((int) archivo.length()); salidaCliente.writeUTF(nombreArchivo); escribir("Enviando archivo:" + nombreArchivo + " a " + s.getInetAddress()); FileInputStream entrada = new FileInputStream(archivo); BufferedInputStream leerArch = new BufferedInputStream(entrada); // Creamos el flujo de salida BufferedOutputStream salida = new BufferedOutputStream(s.getOutputStream()); // Creamos un array de tipo byte byte[] arreglo = new byte[(int) archivo.length()]; // Leemos el archivo y lo introducimos en el array de bytes leerArch.read(arreglo); // Realizamos el envio de los bytes que conforman el archivo for (int i = 0; i < arreglo.length; i++) { salida.write(arreglo[i]); } tiempofinal=(System.currentTimeMillis() - this.initialTime); tiempo_total=tiempofinal-tiempoinicio; escribir("Archivo Enviado a cliente:" + id); System.out.println("El servidor termino con cliente" + id + " EN UN TIEMPO DE: " + tiempo_total + " milisegundos"); System.out.println("Tiempo del cliente "+id +": ("+(System.currentTimeMillis() - this.initialTime)+") milisegundos"); salida.flush();
  • 8. salida.flush(); salida.close(); entrada.close(); //escribir("Tiempo de envio:"+"("+(t0-t1)+")"+" milisegundos"); } if (checar(nombreArchivo) == false) { salidaCliente.writeBoolean(false); salidaCliente.writeUTF("NO existe el archivo:" + nombreArchivo + " en el servidor"); escribir("se envio respuesta al cliente"); } } catch (Exception ex) { escribir(ex.getMessage() + " id:" + id); } finally { try { if (oos != null) { oos.close(); } if (ois != null) { ois.close(); } if (s != null) { s.close(); } System.out.println("Termino proceso para cliente: " + id); } catch (Exception e) { System.out.println(e.getMessage() + " [servidor]"); } } } public static void escribir(String txt) { System.out.println(txt); } } }
  • 9. CODIGO SERVIDOR SECUENCIAL package demoserver; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.net.ServerSocket; import java.net.Socket; /** * * @author Ivan Luis Jimenez */ public class DemoServer { /** * @param args the command line arguments */ public static void main(String[] args) throws IOException, InterruptedException { Socket s = null; ServerSocket ss = null; Tarea ob; int id = 0; try { ss = new ServerSocket(5432);
  • 10. while(true){ Tarea.escribir("Socket escuchando en puerto 5432"); s = ss.accept(); id++; Tarea.escribir("nSe conecto el cliente No." + id + " desde la IP: " + s.getInetAddress()); Tarea.escribir("**************************************************"); //(new Tarea(s, id)).start(); ob = new Tarea(s, id); //ob.join(); ob.start(); ob.join(); } } catch (IOException e) { Tarea.escribir(e.getMessage() + " [servidor]"); System.exit(3); } finally { } } static class Tarea extends Thread { int id; Socket s = null; /* *Atributos para manejar salida y entrada de texto */ ObjectInputStream ois = null;
  • 11. ObjectOutputStream oos = null; DataInputStream entradaCliente = null; DataOutputStream salidaCliente = null; /* *Atributos para manejar salida de archivos */ File archivo = null; long tiempoinicio = 0; long tiempofinal= 0; long tiempo_total=0; long initialTime; private Tarea(Socket socket, int id) { this.s = socket; this.id = id; } boolean checar(String nombre) { archivo = new File("C:UsersJonyDesktopTOOLTrimestre I UAMSistemas Distribuidos2. Servidores multiprocesos, concurrentes y multihilosServidorEnvioArchMultihiloServidorEnvioArchMultihiloorigen" + nombre); if (archivo.exists()) { return true; } else { return false; } } public void run() { try { entradaCliente = new DataInputStream(s.getInputStream()); salidaCliente = new DataOutputStream(s.getOutputStream());
  • 12. String nombreArchivo = entradaCliente.readUTF(); if (checar(nombreArchivo) == true) { tiempoinicio=(System.currentTimeMillis() - this.initialTime); System.out.println("El cliente :" + id + " comienza la transferencia EN EL TIEMPO: " + (System.currentTimeMillis() - this.initialTime) + " milisegundos"); salidaCliente.writeBoolean(true); salidaCliente.writeUTF("SI existe el archivo:" + nombreArchivo + " en el servidor"); salidaCliente.writeUTF("Tamaño del archivo:" + (archivo.length() / 1024) + " KB | Nombre:" + archivo.getName()); salidaCliente.writeInt((int) archivo.length()); salidaCliente.writeUTF(nombreArchivo); escribir("Enviando archivo:" + nombreArchivo + " a " + s.getInetAddress()); FileInputStream entrada = new FileInputStream(archivo); BufferedInputStream leerArch = new BufferedInputStream(entrada); // Creamos el flujo de salida BufferedOutputStream salida = new BufferedOutputStream(s.getOutputStream()); // Creamos un array de tipo byte byte[] arreglo = new byte[(int) archivo.length()]; // Leemos el archivo y lo introducimos en el array de bytes leerArch.read(arreglo); // Realizamos el envio de los bytes que conforman el archivo for (int i = 0; i < arreglo.length; i++) { salida.write(arreglo[i]); } tiempofinal=(System.currentTimeMillis() - this.initialTime); tiempo_total=tiempofinal-tiempoinicio; escribir("Archivo Enviado a cliente:" + id);
  • 13. System.out.println("El servidor termino con cliente" + id + " EN UN TIEMPO DE: " + tiempo_total + " milisegundos"); System.out.println("Tiempo del cliente "+id +": ("+(System.currentTimeMillis() - this.initialTime)+") milisegundos"); salida.flush(); salida.flush(); salida.close(); entrada.close(); //escribir("Tiempo de envio:"+"("+(t0-t1)+")"+" milisegundos"); } if (checar(nombreArchivo) == false) { salidaCliente.writeBoolean(false); salidaCliente.writeUTF("NO existe el archivo:" + nombreArchivo + " en el servidor"); escribir("se envio respuesta al cliente"); } } catch (Exception ex) { escribir(ex.getMessage() + " id:" + id); } finally { try { if (oos != null) { oos.close(); } if (ois != null) { ois.close(); } if (s != null) { s.close(); } System.out.println("Termino proceso para cliente: " + id);
  • 14. } catch (Exception e) { System.out.println(e.getMessage() + " [servidor]"); } } } public static void escribir(String txt) { System.out.println(txt); } } }
  • 15. Capturas Cliente-Servidor concurrente 1. Ejecutando cliente (el servidor ya ha sido iniciado) 2. Ejecución y escritura del
  • 16. 3. Se inician los procesos en paralelo
  • 17. 4. Se recibieron todos los archivos a la carpeta destino
  • 18. Capturas Cliente-Servidor secuencial 1. Ejecución de los cliente (ya ha sido iniciado el servidor) 2. Escribimos el nombre del archivo a solicitar, escribimos uno que no existe, y veremos el resultado. Se enviara el archivo uno tras otro.
  • 19.
  • 20. Y en el servidor tenemos: En el caso del archivo que no existe: Muestra mensaje que no existe: