Академический Документы
Профессиональный Документы
Культура Документы
anteriormente citado, también contara con un número limitado de usuarios que podrán acceder al
sistema, los cuales formaran parte de la base de datos de administradores del sistemas.
DESCRIPCIÓN DEL PROBLEMA
Hoy en día se ha vuelto muy importante la efectividad en los procesos y más aún si estos están
programados en un computador, pues estos garantiza óptimos resultados y mayor respaldo de la
información con la que se está trabajando es por ello, que nace el concepto de “sistemas
distribuidos”, como su propio nombre lo sostiene, es un sistema que trabaja de forma paralela o
distribuida las tareas que está encargado de ejecutar, garantizando así mayor eficiencia en el
trabajo, en cuanto a tiempo, seguridad, etc.
Que acompañado de la optimización constante de cierto producto o trabajo hacen que dicho
producto se vuelva más efectivo y por ende más valorado en el mercado.
OBJETIVOS
Implementar y optimizar la primera entrega del programa que ya se había trabajado, teniendo en
cuenta para el desarrollo del nuevo software puntos como los algoritmos distribuidos, mejorar el
método de encriptación usado en la primera entrega, validación de usuarios a la base de datos.
Estos 3 grandes e importantes puntos a tener en cuenta al desarrollar el programa son los que se
deben cumplir, trazar un estándar y procurar superarlo, ya que exigencias de este tamaño son con
los que convivirá el egresado de la carrera de Ing. De sistemas Computacionales.
Análisis teórico:
Para entender lo que se trabajó tanto en el programa1, como en el programa2 se debe entender y
tener en cuenta los sgtes. Conceptos:
SHA256:
Es un algoritmo de encripta miento, tal y como se señala en el sgte párrafo, podemos ver que los
autores del libro califican al Algoritmo SHA256 como “confiable”:
Young, M., Liu, P., & Lin, D. (2008). Information Security and Cryptology. Begin China: Springer.
1.- Crear el Socket a partir de la dirección de la maquina servidor y el puerto asociado al proceso
de la maquina al que queremos conectarnos (correo, HTTP, FTP, etc.)
3.-Cerra el Socket del mimo modo que hacíamos con los Streams. De hecho, cerrando un Streams
Asociado al Socket, también cerrara el Socket.”
Caballé, S., & Xhafa, F. (2007). Aplicaciones Distribuidas en Java con tecnologia RMI. Madrid:
Publicaciones Delta.
Análisis practico:
VISTA GENERAL NRO 1 DEL “PROGRAMA1” (ANTES DE SER OPTIMIZADO)
Como se observa el programa1 está compuesto por 2 formularios JFrame, los cuales contienen en
su interior la conexión socket con las líneas de código que permite encriptar el mensaje en
SHA256.
El programa1 básicamente está compuesto por 2 formularios Jframe (Cliente y servidor), los cuales
contienen en su interior la conexión socket con las líneas de código que permite encriptar el
mensaje en SHA256.
package EjercicioSocket;
import java.io.DataInputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JTextArea;
public JfrmServidor() {
initComponents();
txtmensajes=new JTextArea();
txtmensajes.setBounds(40,30,400,400);
add(txtmensajes);
setLayout(null);
setSize(500, 500);
//setVisible(true);
setLocationRelativeTo(null);
Thread hilo=new Thread(this);
hilo.start();
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 400, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 300, Short.MAX_VALUE)
);
pack();
}// </editor-fold>
java.util.logging.Logger.getLogger(JfrmServidor.class.getName()).log(java.util.logging.Level.SEVERE
, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(JfrmServidor.class.getName()).log(java.util.logging.Level.SEVERE
, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(JfrmServidor.class.getName()).log(java.util.logging.Level.SEVERE
, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(JfrmServidor.class.getName()).log(java.util.logging.Level.SEVERE
, null, ex);
}
//</editor-fold>
}
});
}
@Override
public void run() {
try {
ServerSocket servidor=new ServerSocket(6500);
Socket cliente;
while(true){
cliente=servidor.accept();
DataInputStream flujo=new DataInputStream(cliente.getInputStream());
String mensaje=flujo.readUTF();
txtmensajes.append("\n"+mensaje);
cliente.close();
if(mensaje.equalsIgnoreCase("FIN"))
servidor.close();
break;
}
} catch (IOException ex) {
Logger.getLogger(JfrmServidor.class.getName()).log(Level.SEVERE, null, ex);
}
package EjercicioSocket;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.DataOutputStream;
import java.net.Socket;
import javax.swing.JButton;
import javax.swing.JTextField;
JTextField txtmensaje;
JButton btnenviar;
JButton btnexaminar;
public JfrmCliente() {
initComponents();
txtmensaje=new JTextField();
txtmensaje.setBounds(10,10,200,30);
add(txtmensaje);
btnenviar=new JButton();
btnenviar.setText("Enviar");
btnenviar.setBounds(20,50,100,30);
btnenviar.addActionListener(this);
add(btnenviar);
setLayout(null);
setSize(250,150);
//setVisible(true);
setLocationRelativeTo(null);
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
*/
@SuppressWarnings("unchecked")
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 400, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
);
pack();
}// </editor-fold>
/**
*/
try {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
java.util.logging.Logger.getLogger(JfrmCliente.class.getName()).log(java.util.logging.Level.SEVERE,
null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(JfrmCliente.class.getName()).log(java.util.logging.Level.SEVERE,
null, ex);
java.util.logging.Logger.getLogger(JfrmCliente.class.getName()).log(java.util.logging.Level.SEVERE,
null, ex);
java.util.logging.Logger.getLogger(JfrmCliente.class.getName()).log(java.util.logging.Level.SEVERE,
null, ex);
//</editor-fold>
java.awt.EventQueue.invokeLater(new Runnable() {
new JfrmCliente().setVisible(true);;
});
@Override
if(ae.getSource()==btnenviar){
try{
flujo.writeUTF(txtmensaje.getText());
cliente.close();
}catch(Exception e){
System.out.println("Error en cliente"+e.getMessage());
*Cabe mencionar que los objetos contenidos en los Jframe están creados a partir de código.
VISTA GENERAL NRO 1 DEL “PROGRAMA2” (DESPUES DE SER OPTIMIZADO)
Archivo.java (JFrame)
Que en su interior contiene 2 Button (Seleccionar Archivo y Enviar) ,1 Jlabel (Donde aparecerá la
ruta de ubicación del archivo)
CorregirRuta.java (Clase)
En su interior se encuentran las líneas de código que harán que la ruta sea manipulada de una
manera más eficiente para el programa (esta acción se hace apoyándose en la efectividad de la
clase “StringTokenizer”).
EnviarArchivo.java (Clase)
Sin duda una de las clases más importantes de este proyecto es aquí donde se crean objetos que
contendrán la dirección IP de la maquina a la cual se va a enviar el archivo, también el puerto por
el cual vamos a hacer la llamada a la maquina servidor, se recomienda colocar como puertos a los
mayores de 1024 ya que los inferiores a estos números son usados por diferentes programas, es
decir mientras más alto sea tu número de puerto es mejor (garantiza la disponibilidad del puerto)
siempre teniendo en cuenta que el número máximo de puerto que contiene una pc es 49151.
PruebaSocket.java (Clase)
Aquí es donde inicializa todo el programa instanciadolo cada vez que corremos el programa.
El Paquete “Servidor”, que contiene:
Servidor.java (Clase)
Esta clase debe ser corrida en la máquina que recepcióna el mensaje (archivo.txt), ya que aquí
también se inicializa el mismo número de puerto que la maquina emisora del mensaje, aquí se
aprecia el uso de métodos como el ReadUTF que sirve para leer archivos de tipo
DataInputStream, también métodos como FileOutputStream, BufferedOutputStream,
manipulación de Byte[] (Arreglo de bytes) y su conversión a String, para posterior mente aplicar
la conversión del contenido del archivo a otra cadena que será su equivalencia encriptada
utilizando la librería proporcionada en clase (encriptación para el método MD5), entre otras
métodos.
Corriendo el Programa2:
Antes:
Durante:
Una vez que tenemos el “Servidor Iniciado”, y gracias a nuestro método “aceept ();” el servidor
estará única y exclusivamente abocado a recepcionar el mensaje que le enviara la maquina
“Cliente”, posterior a esta acción, Al correr el Archivo.java (que es el formulario de la clase Cliente),
se inicia mostrando 2 botones, el primero que es para seleccionar el archivo a enviar y el segundo
que será para proceder a enviar tal archivo (observamos como mejora la ventana grafica desde la
cual se seleccionara el archivo).
Una vez seleccionado el archivo a enviar se muestra la ubicación del archivo en el “JLabel” que no
se aprecia sino hasta seleccionado el archivo.
Por ultimo observamos que se transfirió con éxito el archivo a la ruta especificada de forma interna
en el programa, cabe resaltar que se observó que si un archivo con el nombre ya existe este no se
enviara, como también una falencia al escribir el nombre al archivo, aspectos que se mejoraran
para el día de la exposición (semana 8).
https://md5online.es/
Como conclusión principal podría hablar del KAYZEN (principio de mejora continua), es decir, aun
habiendo optimizado el programa, implementando otro algoritmo de encriptación, una estructura
más robusta y desarrollada en el interior del programa, se siguen presentando ligeros pero
importantes aspectos a mejorar, entonces se podría decir que el desarrollo de software está
asociado a un trabajo de mejora continua, esto partiendo de un análisis permanente y estudio de
métodos y manejos de objetos en el lenguaje de programación en el que se trabaja.
También podría citar como una conclusión el uso necesario de un trabajo debidamente
estructurado tomándonos el tiempo necesario para analizar cada línea de código y su lógica, solo
de esta manera se puede entender, mejorar, rediseñar, y reemplazar líneas de código dentro del
programa.
Otra conclusión seria la importancia del rol que cumplen en el aspecto de seguridad informática,
los algoritmos de encriptación, como también la importancia de estándares dentro de los mismos.
918a050d-1720-4cab-97f3-c6aedc27e4ba