SlideShare una empresa de Scribd logo
1 de 20
Descargar para leer sin conexión
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

Algoritmos DEKKER y PETERSON
Algoritmos DEKKER y PETERSONAlgoritmos DEKKER y PETERSON
Algoritmos DEKKER y PETERSONPANAFMX
 
Administración de procesos en el S.O.
Administración de procesos en el S.O.Administración de procesos en el S.O.
Administración de procesos en el S.O.Carlos Solano
 
seguridad de computo en la nube
seguridad de computo en la nubeseguridad de computo en la nube
seguridad de computo en la nubemargarita torres
 
Proteccion y seguridad de sistemas operativos
Proteccion y seguridad de sistemas operativosProteccion y seguridad de sistemas operativos
Proteccion y seguridad de sistemas operativosEnrike Mendoza
 
Mecanismos de exclusion mutua y algoritmos
Mecanismos de exclusion mutua y algoritmosMecanismos de exclusion mutua y algoritmos
Mecanismos de exclusion mutua y algoritmosAbimael hernandez
 
Gestion entrada y salida
Gestion entrada y salidaGestion entrada y salida
Gestion entrada y salidaDavid Martinez
 
1.5.2 redes de ejemplo tipicas orientadas a conexion
1.5.2  redes de ejemplo tipicas orientadas a conexion 1.5.2  redes de ejemplo tipicas orientadas a conexion
1.5.2 redes de ejemplo tipicas orientadas a conexion luishdiaz
 
2...2 expresiones regulares, cerradura, fractales, automata
2...2 expresiones regulares, cerradura, fractales, automata2...2 expresiones regulares, cerradura, fractales, automata
2...2 expresiones regulares, cerradura, fractales, automataJacqui Venegas
 
Unidad 6 Protección y seguridad.
Unidad 6 Protección y seguridad.Unidad 6 Protección y seguridad.
Unidad 6 Protección y seguridad.Juan Anaya
 
Procesos Ligeros: Hilos o Hebras
Procesos Ligeros: Hilos o HebrasProcesos Ligeros: Hilos o Hebras
Procesos Ligeros: Hilos o HebrasJ M
 
ANALISIS DE ALGORITMOS
ANALISIS DE ALGORITMOSANALISIS DE ALGORITMOS
ANALISIS DE ALGORITMOSEvans Balcazar
 
Sintaxis semantica de un sistema de produccion
Sintaxis semantica de un sistema de produccionSintaxis semantica de un sistema de produccion
Sintaxis semantica de un sistema de produccionMonica Toledo Villalobos
 
Instalar y configurar servidor de correo imap en ubuntu
Instalar y configurar servidor de correo imap en ubuntuInstalar y configurar servidor de correo imap en ubuntu
Instalar y configurar servidor de correo imap en ubuntuRoberto Eloy Valerio Severino
 

La actualidad más candente (20)

Diagrama de Componentes
Diagrama de ComponentesDiagrama de Componentes
Diagrama de Componentes
 
Algoritmos DEKKER y PETERSON
Algoritmos DEKKER y PETERSONAlgoritmos DEKKER y PETERSON
Algoritmos DEKKER y PETERSON
 
Administración de procesos en el S.O.
Administración de procesos en el S.O.Administración de procesos en el S.O.
Administración de procesos en el S.O.
 
Conceptos de software
Conceptos de softwareConceptos de software
Conceptos de software
 
seguridad de computo en la nube
seguridad de computo en la nubeseguridad de computo en la nube
seguridad de computo en la nube
 
Proteccion y seguridad de sistemas operativos
Proteccion y seguridad de sistemas operativosProteccion y seguridad de sistemas operativos
Proteccion y seguridad de sistemas operativos
 
Mecanismos de exclusion mutua y algoritmos
Mecanismos de exclusion mutua y algoritmosMecanismos de exclusion mutua y algoritmos
Mecanismos de exclusion mutua y algoritmos
 
Gestion entrada y salida
Gestion entrada y salidaGestion entrada y salida
Gestion entrada y salida
 
Que Es Java
Que Es JavaQue Es Java
Que Es Java
 
1.5.2 redes de ejemplo tipicas orientadas a conexion
1.5.2  redes de ejemplo tipicas orientadas a conexion 1.5.2  redes de ejemplo tipicas orientadas a conexion
1.5.2 redes de ejemplo tipicas orientadas a conexion
 
Diseño de patrones
Diseño de patronesDiseño de patrones
Diseño de patrones
 
2...2 expresiones regulares, cerradura, fractales, automata
2...2 expresiones regulares, cerradura, fractales, automata2...2 expresiones regulares, cerradura, fractales, automata
2...2 expresiones regulares, cerradura, fractales, automata
 
Unidad 6 Protección y seguridad.
Unidad 6 Protección y seguridad.Unidad 6 Protección y seguridad.
Unidad 6 Protección y seguridad.
 
Procesos Ligeros: Hilos o Hebras
Procesos Ligeros: Hilos o HebrasProcesos Ligeros: Hilos o Hebras
Procesos Ligeros: Hilos o Hebras
 
Procesos en windows
Procesos en windowsProcesos en windows
Procesos en windows
 
Administración de memoria
Administración de memoriaAdministración de memoria
Administración de memoria
 
Tecnicas de Administracion de Memoria
Tecnicas de Administracion de MemoriaTecnicas de Administracion de Memoria
Tecnicas de Administracion de Memoria
 
ANALISIS DE ALGORITMOS
ANALISIS DE ALGORITMOSANALISIS DE ALGORITMOS
ANALISIS DE ALGORITMOS
 
Sintaxis semantica de un sistema de produccion
Sintaxis semantica de un sistema de produccionSintaxis semantica de un sistema de produccion
Sintaxis semantica de un sistema de produccion
 
Instalar y configurar servidor de correo imap en ubuntu
Instalar y configurar servidor de correo imap en ubuntuInstalar y configurar servidor de correo imap en ubuntu
Instalar y configurar servidor de correo imap en ubuntu
 

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

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 Pedro Valera
Lw2010 Pedro ValeraLw2010 Pedro Valera
Lw2010 Pedro Valera
 
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
 
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

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 nodosIvan Luis Jimenez
 
Métodos en Java-Con ejemplos
Métodos en Java-Con ejemplosMétodos en Java-Con ejemplos
Métodos en Java-Con ejemplosIvan Luis Jimenez
 
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)Ivan Luis Jimenez
 
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...Ivan Luis Jimenez
 
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 HolaMundoIvan Luis Jimenez
 
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...Ivan Luis Jimenez
 
Comandos básicos para crear VLANs
Comandos básicos para crear  VLANsComandos básicos para crear  VLANs
Comandos básicos para crear VLANsIvan Luis Jimenez
 
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 RIPv2Ivan Luis Jimenez
 
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 voltajeIvan Luis Jimenez
 
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 StudentIvan Luis Jimenez
 
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 DesarrolladoresIvan Luis Jimenez
 
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 JFLEXIvan Luis Jimenez
 
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 MySQLIvan Luis Jimenez
 
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 MySQLIvan Luis Jimenez
 
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)Ivan Luis Jimenez
 

Más de Ivan Luis Jimenez (15)

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
 
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
 
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

La Función tecnológica del tutor.pptx
La  Función  tecnológica  del tutor.pptxLa  Función  tecnológica  del tutor.pptx
La Función tecnológica del tutor.pptxJunkotantik
 
TRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIA
TRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIATRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIA
TRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIAAbelardoVelaAlbrecht1
 
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptxOLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptxjosetrinidadchavez
 
Unidad II Doctrina de la Iglesia 1 parte
Unidad II Doctrina de la Iglesia 1 parteUnidad II Doctrina de la Iglesia 1 parte
Unidad II Doctrina de la Iglesia 1 parteJuan Hernandez
 
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxSINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxlclcarmen
 
TEST DE RAVEN es un test conocido para la personalidad.pdf
TEST DE RAVEN es un test conocido para la personalidad.pdfTEST DE RAVEN es un test conocido para la personalidad.pdf
TEST DE RAVEN es un test conocido para la personalidad.pdfDannyTola1
 
Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.José Luis Palma
 
Día de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialDía de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialpatriciaines1993
 
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docx
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docxPLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docx
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docxJUANSIMONPACHIN
 
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzel CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzprofefilete
 
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptxPresentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptxYeseniaRivera50
 
FICHA DE MONITOREO Y ACOMPAÑAMIENTO 2024 MINEDU
FICHA DE MONITOREO Y ACOMPAÑAMIENTO  2024 MINEDUFICHA DE MONITOREO Y ACOMPAÑAMIENTO  2024 MINEDU
FICHA DE MONITOREO Y ACOMPAÑAMIENTO 2024 MINEDUgustavorojas179704
 
BIOLOGIA_banco de preguntas_editorial icfes examen de estado .pdf
BIOLOGIA_banco de preguntas_editorial icfes examen de estado .pdfBIOLOGIA_banco de preguntas_editorial icfes examen de estado .pdf
BIOLOGIA_banco de preguntas_editorial icfes examen de estado .pdfCESARMALAGA4
 
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIARAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIACarlos Campaña Montenegro
 
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptxc3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptxMartín Ramírez
 
Estrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdfEstrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdfromanmillans
 
periodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicasperiodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicas123yudy
 
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...JAVIER SOLIS NOYOLA
 

Último (20)

La Función tecnológica del tutor.pptx
La  Función  tecnológica  del tutor.pptxLa  Función  tecnológica  del tutor.pptx
La Función tecnológica del tutor.pptx
 
TRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIA
TRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIATRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIA
TRIPTICO-SISTEMA-MUSCULAR. PARA NIÑOS DE PRIMARIA
 
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptxOLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
OLIMPIADA DEL CONOCIMIENTO INFANTIL 2024.pptx
 
Unidad II Doctrina de la Iglesia 1 parte
Unidad II Doctrina de la Iglesia 1 parteUnidad II Doctrina de la Iglesia 1 parte
Unidad II Doctrina de la Iglesia 1 parte
 
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxSINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
 
TEST DE RAVEN es un test conocido para la personalidad.pdf
TEST DE RAVEN es un test conocido para la personalidad.pdfTEST DE RAVEN es un test conocido para la personalidad.pdf
TEST DE RAVEN es un test conocido para la personalidad.pdf
 
Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.
 
Día de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialDía de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundial
 
Unidad 3 | Teorías de la Comunicación | MCDI
Unidad 3 | Teorías de la Comunicación | MCDIUnidad 3 | Teorías de la Comunicación | MCDI
Unidad 3 | Teorías de la Comunicación | MCDI
 
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docx
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docxPLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docx
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docx
 
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzel CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
 
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptxPresentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
 
FICHA DE MONITOREO Y ACOMPAÑAMIENTO 2024 MINEDU
FICHA DE MONITOREO Y ACOMPAÑAMIENTO  2024 MINEDUFICHA DE MONITOREO Y ACOMPAÑAMIENTO  2024 MINEDU
FICHA DE MONITOREO Y ACOMPAÑAMIENTO 2024 MINEDU
 
BIOLOGIA_banco de preguntas_editorial icfes examen de estado .pdf
BIOLOGIA_banco de preguntas_editorial icfes examen de estado .pdfBIOLOGIA_banco de preguntas_editorial icfes examen de estado .pdf
BIOLOGIA_banco de preguntas_editorial icfes examen de estado .pdf
 
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIARAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
 
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptxc3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
 
Estrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdfEstrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdf
 
periodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicasperiodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicas
 
Sesión La luz brilla en la oscuridad.pdf
Sesión  La luz brilla en la oscuridad.pdfSesión  La luz brilla en la oscuridad.pdf
Sesión La luz brilla en la oscuridad.pdf
 
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
 

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: