ejercicioscliente servidor

8
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” ESCUELA DE SISTEMAS CARRERA DE SISTEMAS NOMBRE: ANGÉLICA PEÑA CATEDRÁTICO: Ing. LUIS SUÁREZ NIVEL: OCTAVO MATERIA: DESARROLLO CLIENTE SERVIDOR II TEMA: EJERCICIOS DE RMI FECHA: 12-06-2015

Upload: anghy-pena

Post on 11-Aug-2015

5 views

Category:

Food


0 download

TRANSCRIPT

Page 1: Ejercicioscliente servidor

UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES“UNIANDES”

ESCUELA DE SISTEMASCARRERA DE SISTEMAS

NOMBRE: ANGÉLICA PEÑA

CATEDRÁTICO: Ing. LUIS SUÁREZ

NIVEL: OCTAVO

MATERIA: DESARROLLO CLIENTE SERVIDOR II

TEMA: EJERCICIOS DE RMI

FECHA: 12-06-2015

IBARRA – ECUADOR

Page 2: Ejercicioscliente servidor

SERVIDOR DE ARCHIVOS

CLASSSERVER

ClassServer es una clase abstracta que proporciona funcionalidad básica de un mini-servidor web, especializada. Para cargar archivos de clase única. Un ClassServer debe extenderse y la subclase concreta debe definir el getBytes  Método que es responsable de recuperar los bytecodes para una clase.    La ClassServer crea un hilo que escucha en un socket y acepta HTTP GET peticiones. La respuesta HTTP contiene el Bytecodes de la clase que se solicita en la cabecera GET.   Para cargar clases remotas, una aplicación RMI puede utilizar un hormigón  Subclase de este servidor en lugar de un servidor HTTP.

protected ClassServer(int port) throws IOException // Construye un ClassServer que escucha en puerto {

this.port = port;//puertoserver = new ServerSocket(port);newListener();

}

Devuelve una matriz de bytes que contienen los códigos de bytes para      * La clase representada por el argumento ruta       * la ruta es un punto separa nombre de la clase con      * La extensión ".class" eliminado.      *return Los bytecodes de la clase      * ClassNotFoundExceptionexception si la clase correspondiente      * ruta no se pudo cargar.      * IOExceptionexception si se produce un error de lectura de la clase

public abstract byte[] getBytes(String path)throws IOException, ClassNotFoundException;

El hilo "escuchar" que acepta una conexión con el      * Servidor, analiza la cabecera para obtener el nombre del archivo de clase      * Y devuelve los códigos de bytes para la clase (o error      * Si la clase no se encuentra o la respuesta fue mal formado).public void run() {

Socket socket;// aceptar una conexión

try { socket = server.accept();} catch (IOException e) { System.out.println("Class Server died: " + e.getMessage());

Page 3: Ejercicioscliente servidor

return;}

// Crear un nuevo hilo para aceptar la próxima conexión

newListener();

try { DataOutputStream out =

new DataOutputStream(socket.getOutputStream()); try {

// Obtener la ruta al archivo de clase de la cabeceraDataInputStream in =

new DataInputStream(socket.getInputStream());String path = getPath(in);

// Recuperar bytecodesbyte[] bytecodes = getBytes(path);// Enviar códigos de bytes en respuesta (asume HTTP / 1.0 o posterior)try {

out.writeBytes("C:/Users/LAB1-PC09/Documents/EJERCICIO CS/ClassServer \r\n");

out.writeBytes("Content-Length: " + bytecodes.length + "\r\n");

out.writeBytes("Content-Type: application/java\r\n\r\n"); out.write(bytecodes); out.flush();} catch (IOException ie) {}

} catch (IOException | ClassNotFoundException e) {// Escribir respuesta de error

out.writeBytes("C:/Users/LAB1-PC09/Documents/EJERCICIO CS/ClassServer " + e.getMessage() + "\r\n");

out.writeBytes("Content-Type: text/html\r\n\r\n");out.flush();

}

} catch (IOException ex) {// Comer excepción (podría registrar errores para el archivo de registro, pero// Escribir en stdout por ahora).

System.out.println("error writing response: " + ex.getMessage()); } finally { try {

socket.close();

Page 4: Ejercicioscliente servidor

} catch (IOException e) { }}

}

* Crear un nuevo hilo para escuchar.

private void newListener() {

(new Thread(this)).start(); }Devuelve la ruta de acceso al archivo de clase obtenida a partir de      * Analizar la cabecera HTML.private static String getPath(DataInputStream in)

throws IOException {

String line = in.readLine();String path = "";

Clase extracto de línea GETif (line.startsWith("GET /")) {

line = line.substring(5, line.length()-1).trim();

int index = line.indexOf(".class "); if (index != -1) {

path = line.substring(0, index).replace('/', '.'); }}

// Comer el resto de la cabecera

do { line = in.readLine();} while ((line.length() != 0) && (line.charAt(0) != '\r') && (line.charAt(0) != '\n'));

if (path.length() != 0) { return path;} else { throw new IOException("Malformed Header");}

}}

CLASSFILESERVER.JAVA

El ClassFileServer implementa un ClassServer que

Page 5: Ejercicioscliente servidor

  *Lee archivos de clases del sistema de archivos.

private String classpath;private static int DefaultServerPort = 2001;

Construye un ClassFileServer.CLASSPATH la ruta de clases donde el servidor localiza clases

public ClassFileServer(int port, String classpath) throws IOException {

super(port);this.classpath = classpath;

}

Devuelve una matriz de bytes que contienen los códigos de bytes para La clase representada por el argumento ruta El ruta es un punto separa nombre de la clase conLa extensión ".class" eliminado. return Los bytecodes de la clase ClassNotFoundExceptionexception si la clase correspondiente X ruta no se pudo cargar.

public byte[] getBytes(String path)throws IOException, ClassNotFoundException

{System.out.println("reading: " + path);File f = new File(classpath + File.separator +

path.replace('.', File.separatorChar) + ".class");int length = (int)(f.length());if (length == 0) { throw new IOException("File length is zero: " + path);} else { FileInputStream fin = new FileInputStream(f); DataInputStream in = new DataInputStream(fin); byte[] bytecodes = new byte[length]; in.readFully(bytecodes); return bytecodes;}

}

Método principal para crear el servidor de clase que lee Los archivos de clase. Esto tiene dos argumentos de la línea de comandos, los Puerto en el que el servidor acepta peticiones y la Raíz de la ruta de clases. Para iniciar el servidor: java ClassFileServer <puerto> <ruta de clase>

La base de código de un servidor RMI que utiliza este servidor web haría Simplemente contener una URL con el host y el puerto de la web

Servidor (si classpath del servidor web es la misma que

Page 6: Ejercicioscliente servidor

Classpath del servidor RMI):

java -Djava.rmi.server.codebase = http: // zaphod: 2001 / RMIServer       Usted puede crear su propio servidor de clase dentro de su servidor RMILa aplicación en lugar de ejecutar una por separado. En su servidorPrincipal simplemente crear un ClassFileServernueva ClassFileServer (puerto, ruta de clase);      El ruta Es Un punto separa nombre de la clase conLa extensión ".class" Eliminado.

Los regresar bytecodes de la claseClassNotFoundExceptionexception si la clase CorrespondienteRuta no se Pudo cargar. No se pudo cargar.public static void main(String args[]) {

int port = DefaultServerPort;String classpath = "";

if (args.length >= 1) { port = Integer.parseInt(args[0]);}

if (args.length >= 2) { classpath = args[1];}

try { ClassFileServer classFileServer = new ClassFileServer(port, classpath);

} catch (IOException e) { System.out.println("Unable to start ClassServer: " +

e.getMessage());}

}}