UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES
“UNIANDES”
ESCUELA DE SISTEMAS
CARRERA DE SISTEMAS
NOMBRE:ANGÉLICA PEÑA
CATEDRÁ...
SERVIDOR DE ARCHIVOS
CLASSSERVER
ClassServer es una clase abstracta que proporciona funcionalidad básica de un mini-
servi...
return;
}
// Crear un nuevo hilo para aceptar la próxima conexión
newListener();
try {
DataOutputStreamout =
new DataOutpu...
} catch (IOException e) {
}
}
}
* Crear un nuevo hilo para escuchar.
private void newListener()
{
(new Thread(this)).start...
*Lee archivos de clases del sistema de archivos.
private String classpath;
private static int DefaultServerPort = 2001;
Co...
Classpath del servidor RMI):
java -Djava.rmi.server.codebase = http: // zaphod: 2001 / RMIServer
Usted puede crear su prop...
Próxima SlideShare
Cargando en…5
×

Ejercicioscliente servidor

111 visualizaciones

Publicado el

yuyyuyu

Publicado en: Alimentación
0 comentarios
0 recomendaciones
Estadísticas
Notas
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

Sin descargas
Visualizaciones
Visualizaciones totales
111
En SlideShare
0
De insertados
0
Número de insertados
4
Acciones
Compartido
0
Descargas
1
Comentarios
0
Recomendaciones
0
Insertados 0
No insertados

No hay notas en la diapositiva.

Ejercicioscliente servidor

  1. 1. 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 IBARRA – ECUADOR
  2. 2. 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;//puerto server = 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());
  3. 3. return; } // Crear un nuevo hilo para aceptar la próxima conexión newListener(); try { DataOutputStreamout = new DataOutputStream(socket.getOutputStream()); try { // Obtener la ruta al archivo de clase de la cabecera DataInputStreamin = new DataInputStream(socket.getInputStream()); String path = getPath(in); // Recuperar bytecodes byte[] 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 rn"); out.writeBytes("Content-Length:" + bytecodes.length + "rn"); out.writeBytes("Content-Type:application/javarnrn"); 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() + "rn"); out.writeBytes("Content-Type:text/htmlrnrn"); 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();
  4. 4. } 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(DataInputStreamin) throws IOException { String line = in.readLine(); String path = ""; Clase extracto de línea GET if (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
  5. 5. *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 con La 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 { FileInputStreamfin = 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
  6. 6. 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 RMI La aplicación en lugar de ejecutar una por separado. En su servidor Principal simplemente crear un ClassFileServer nueva ClassFileServer (puerto, ruta de clase); El ruta Es Un punto separa nombre de la clase con La extensión ".class" Eliminado. Los regresar bytecodes de la clase ClassNotFoundExceptionexception si la clase Correspondiente Ruta 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()); } } }

×