Está en la página 1de 15

SISTEMAS DISTRIBUIDOS

Entrega 1 Semana 3
Grupo No. 12

Carlos Ariel Aranda Martínez Cod: 1911020100

Janeth Astrid Muñoz Álvarez Cod: 100217651

José Daniel Giraldo Parra Cod: 100245162

Ana Milena Diaz Carvajal Cod: 812011645


José Luis Duarte Mesa Cod: 1520010205

John Aníbal Martin Aguilera Cod: 1911027636

Tatiana Geraldine Gil Toro Cod:100231326

Lady Yolima Galindo Serrano Cod: 1821022661

Jorge Rodríguez vela Cod: 100031551

Estefanía Valbuena Rincón Cod: 1821020963

Docente: Silva Monsalve Alexandra María

Politécnico Gran Colombiano.


Facultad de Ingeniería, Diseño e Innovación Escuela de Ciencias Básicas.
Bogotá 2022
TABLA DE CONTENIDO

INTRODUCCIÓN............................................................................................................................................. 3
DESARROLLO DE LA ACTIVIDAD .................................................................................................................... 4
1. Instalación de la máquina virtual con el sistema operativo ............................................................. 4
2. Estado del arte de socket: ................................................................................................................. 7
3. Diseño de red para el desarrollo: ...................................................................................................... 9
4. Desarrollo del código java ................................................................................................................. 9
4.1 Clase CLIENTE: ........................................................................................................................... 9
4.2 Clase Servidor.......................................................................................................................... 10
4.3 Clase Conexión ........................................................................................................................ 12
4.4 Clase MainCliente ................................................................................................................... 13
4.5 Clase MainServidor ................................................................................................................. 13
5. Link del video .................................................................................................................................. 13
6. Conclusiones ................................................................................................................................... 14
7. Referencias...................................................................................................................................... 15
INTRODUCCIÓN

Los sistemas operativos son programas que permite administrar el hardware y el


software en un equipo de cómputo, estos sistemas distribuidos poseen unas enormes
ventajas con respeto a los sistemas centralizados y computadoras aliadas donde se
comunican sistematizan sus acciones mediante las transferencias de datos.

En este documento como grupo describimos los pasos a seguir para la instalación y
configuración de un sistema operativo Linux dentro de una máquina virtual. Para esto
usaremos VirtualBox como herramienta de virtualización, y Windows como sistema base
que será dominado por host y CentOS como sistema operativo de máquinas virtuales.
DESARROLLO DE LA ACTIVIDAD

1. Instalación de la máquina virtual con el sistema operativo


2. Estado del arte de socket:

Los sockets son mecanismos de comunicación entre procesos que permiten que un
proceso hable con otro proceso estando en distintas maquinas es necesario para
establecer una infraestructura del cliente servidor, desde el punto de vista de
programacion un socket no es más que un fichero que se abre de una manera especial
1. Tipos de sockets

Tenemos dos tipos de sockets stream esta orientado a la conexión y el datagrama es


no orientado a conexión y data está orientado al protocolo UDP que no garantiza que
los paquetes de data lleguen, pero es más rápido, para realizar la creación de los
sockets debemos tener encuentra el protocolo y de que lado se encuentra

2. Cliente-servidor

Ya definimos que los sockets son una piedra angular necesaria para la conexión a través
de una red de datos y así transmitir la información requerida, por lo tanto, en estos casos
para simplificar las conexiones se crearon drivers o conjuntos de utilizades y /o
herramientas que simplifican la tarea de creación de estos sockets.

Las propiedades de un socket dependen de las características del protocolo en el que


se implementan. Generalmente la comunicación con sockets se realiza mediante un
protocolo de la familia TCP/IP (Protocolo de Control de Transmisión/Protocolo de
Internet). Los dos más utilizados son: TCP (Protocolo de Control de Transmisión) y UDP
(Protocolo de Datagrama de Usuario)

Cuando se implementan con el protocolo TCP, los sockets tienen las siguientes
propiedades:

• Orientado a conexión.
• Se garantiza la transmisión de todos los octetos sin errores ni omisiones.
• Se garantiza que todo octeto llegará a su destino en el mismo orden en que se ha
transmitido. Estas propiedades son muy importantes para garantizar la corrección
de los programas que tratan la información.
3. Diseño de red para el desarrollo:

4. Desarrollo del código java

4.1 Clase CLIENTE:

import java.io.*;
import java.util.Scanner;
public class Cliente extends Conexion
{
public Cliente() throws IOException{super("cliente");} //Se usa el constructor para cliente de Conexion

public void startClient() //Método para iniciar el cliente


{
Scanner teclado = new Scanner(System.in);
try
{
//Flujo de datos hacia el servidor
DataInputStream entrada;
entrada = new DataInputStream(cs.getInputStream());
salidaServidor = new DataOutputStream(cs.getOutputStream());
String cuenta = "";
String accion = "";
String valor = "";
String mensaje = "";
String mensajeRecibido;
System.out.println("En cualquier momento escriba ff para salir del aplicativo");
while(!accion.equals("ff") || !cuenta.equals("ff") || !valor.equals("ff")){
System.out.println("Escriba i para ingresar a una cuenta, o escriba c para consultar");
accion = teclado.nextLine();
if(accion.equals("i")) {
System.out.println("Escriba el numero de la cuenta");
cuenta = teclado.nextLine();
System.out.println("Escriba el valor a ingresar");
valor = teclado.nextLine();
mensaje = accion+","+cuenta+","+valor;
}
if(accion.equals("c")) {
System.out.println("Escriba el numero de la cuenta");
cuenta = teclado.nextLine();

mensaje = accion+","+cuenta;

}
salidaServidor.writeUTF(mensaje);//enviamos mensaje
mensajeRecibido = entrada.readUTF();//Leemos respuesta
System.out.println(mensajeRecibido);

}
cs.close();//Fin de la conexión
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
}
}

4.2 Clase Servidor

import java.io.*;
import java.util.*;

public class Servidor extends Conexion //Se hereda de conexión para hacer uso de los sockets y demás
{
public Servidor() throws IOException{super("servidor");} //Se usa el constructor para servidor de Conexion
public void startServer()//Método para iniciar el servidor
{
try
{
String ruta = " "/home/ubuntu/eclipse-workspace/Socket_Servidor/src/datos.txt"";
//Esperando conexión
System.out.println("Esperando...");

//Accept comienza el socket y espera una conexión desde un cliente


cs = ss.accept();
System.out.println("Cliente en línea");
//Se obtiene el flujo de salida del cliente para enviarle mensajes
salidaCliente = new DataOutputStream(cs.getOutputStream());
DataInputStream entrada;
String mensajeRecibido;
entrada = new DataInputStream(cs.getInputStream());
//Leemos respuesta
mensajeRecibido = entrada.readUTF();

// Divide el mensaje si tiene ,


String data[] = mensajeRecibido.split(",");
String accion = data[0];
String cuenta = data[1];

// Acción es ingresar
if(accion.equals("i")) {
int valor = Integer.parseInt(data[2]);
int cuentaInt = Integer.parseInt(cuenta);

FileWriter fichero = null;


PrintWriter pw = null;
try
{
fichero = new FileWriter(ruta,true);
pw = new PrintWriter(fichero);
String salida = cuentaInt+" "+valor;
pw.println(salida);
salidaCliente.writeUTF("OK");

} catch (Exception e) {
salidaCliente.writeUTF("NO-OK");
e.printStackTrace();
} finally {
try {
// Nuevamente aprovechamos el finally para
// asegurarnos que se cierra el fichero.
if (null != fichero)
fichero.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}

}
// Acción Consultar
if(accion.equals("c")) {

// Lectura del fichero


File archivo = null;
FileReader fr = null;
BufferedReader br = null;

archivo = new File (ruta);


fr = new FileReader (archivo);
br = new BufferedReader(fr);
String linea;
// Lee linea a linea el archivo para buscar el saldo
while((linea=br.readLine())!=null) {
String salida[] = linea.split(" ");
String cUsuario = salida[0];
int saldo = Integer.parseInt(salida[1]);

if(cuenta.equals(cUsuario)){
//System.out.println(cuenta+" "+saldo);
salidaCliente.writeUTF("Saldo del usuario "+saldo);
}
//System.out.println(Arrays.toString(salida));

System.out.println("Fin de la conexión");

ss.close();//Se finaliza la conexión con el cliente


}
catch (Exception e)
{
System.out.println(e.getMessage());
}
}
}
4.3 Clase Conexión

import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Conexion


{
private final int PUERTO = 1245; //Puerto para la conexión
private final String HOST = "192.168.1.169" //Host para la conexión
protected String mensajeServidor; //Mensajes entrantes (recibidos) en el servidor
protected ServerSocket ss; //Socket del servidor
protected Socket cs; //Socket del cliente
protected DataOutputStream salidaServidor, salidaCliente; //Flujo de datos de salida

public Conexion(String tipo) throws IOException //Constructor


{
if(tipo.equalsIgnoreCase(“servidor”))
{
ss = new ServerSocket(PUERTO);//Se crea el socket para el servidor en puerto 1234
cs = new Socket(); //Socket para el cliente
}
else
{
cs = new Socket(HOST, PUERTO); //Socket para el cliente en localhost en puerto 1234
}
}
}

4.4 Clase MainCliente

import java.io.IOException;

//Clase principal que hará uso del cliente


public class MainCliente
{
public static void main(String[] args) throws IOException
{
Cliente cli = new Cliente(); //Se crea el cliente

System.out.println("Iniciando cliente\n");
cli.startClient(); //Se inicia el cliente
}
}
4.5 Clase MainServidor

import java.io.IOException;

//Clase principal que hará uso del servidor


public class MainServidor
{
public static void main(String[] args) throws IOException
{
Servidor serv = new Servidor(); //Se crea el servidor

System.out.println("Iniciando servidor\n");
serv.startServer(); //Se inicia el servidor
}
}

5. Link del video

https://youtu.be/1NPaVLXO89E
6. Conclusiones

En esta actividad como grupo nos ha permitido conocer las partes esenciales de un
sistema operativo como son las máquinas virtuales y configuración de las mismas, para
esta implantación del modelo cliente-servidor fue necesario la instalación MV donde se
ejecutó el código en java utilizando el método socket.

El interactuar tanto como cliente y como servidor al momento de hacer pruebas de


consulta y respuesta de datos basados en código de Java y puesto a correr sobre una
máquina virtual y una estación, nos dan una visión más clara de las infinitas
funcionalidades que nos entregan los sockets en el mundo real, en sí nos damos cuenta
que en la mayoría de los procesos son claves para la transmisión de información.
7. Referencias

Albala, A. (2021, March 12). Cómo instalar Eclipse IDE en Ubuntu 20.04. conpilar.es.

https://conpilar.es/como-instalar-eclipse-ide-en-ubuntu-20-04/

Antonella. (2022, January 6). Respuesta rápida: ¿Cómo actualizar Java en Linux? CompuHoy.com.

https://www.compuhoy.com/respuesta-rapida-como-actualizar-java-en-linux/

Cordero, P. (n.d.). Como instalar Ubuntu en VirtualBox. Ugr.es. Retrieved March 29, 2022, from

https://osl.ugr.es/2020/09/29/como-instalar-ubuntu-en-virtual-box/

González, J. D. M. (2018, February 20). Sockets en Java: Un sistema cliente-servidor con sockets.

Programarya.com; ProgramarYa. https://www.programarya.com/Cursos-

Avanzados/Java/Sockets

Socket. (n.d.). Ecured.cu. Retrieved March 29, 2022, from https://www.ecured.cu/Socket

(N.d.). Uma.Es. Retrieved March 29, 2022, from

http://www.lcc.uma.es/~eat/services/i_socket/i_socket.html#link2

También podría gustarte