You are on page 1of 15

DEPARTAMENTO DE ELÉCTRICA Y ELECTRÓNICA

CARRERA DE:
INGENIERÍA ELECTRÓNICA EN TELECOMUNICACIONES

ASGINATURA: TECNOLOGÍA DE SOFTWARE PARA ELECTRÓNICA

DEBER 2_2
EJERCICIOS

TUTOR: ING. EVELIO GRANIZO


INTEGRANTES: JONATHAN CHASI

FECHA: 2018-12-13
SANGOLQUÍ – ECUADOR
Ejercicio:
Utilizar un servidor de venta de entradas al cine, que debe de comportarse como se
especifica a continuación:
– El cliente enviará como parámetro el nombre de la máquina que actúa como servidor, en
este ejemplo será “localhost” ya que se correrá tanto el cliente como el servidor en la misma
máquina.
– Cuando se conecte el cliente enviará al servidor la cadena “HOLA”.
– El servidor la leerá y mostrará por pantalla el mensaje “HOLA”.
– Después le devolverá el saludo a la máquina cliente “HOLA”.
– El cliente imprimirá por pantalla la cadena.

Después del protocolo de saludo entre el cliente y el servidor, el cliente podrá realizar
cualquiera de estos comandos o acciones.
– TOTAL: Mostrará el número de tarjetas compradas.
– COMPRA n: Solicitará la compra de una entrada al cine de tipo (1<=n<=3).
– ANULA n: Anulará la compra de una entrada al cine de tipo (1<=n<=3).

El precio para cada tarjeta de transporte será igual a:


 1 tipo sala VIP : 20 USD
 2 tipo butaca : 10 USD
 3 tipo general : 5 USD

Acciones adicionales del cliente y servidor:


– El servidor, con el comando COMPRA, incrementará en 1 la lista de solicitudes de
compra de entradas al cine. Imprimirá el precio por pantalla y después lo enviará al
cliente.
– El servidor, con el comando ANULA comprobará si ha comprado al menos una
entrada al cine de ese tipo y la anulará, decrementando en 1 el valor. Mostrará el
precio en negativo y se lo enviará al cliente.
– El servidor, con el comando TOTAL, creará una cadena con el total de la compra,
el número de entradas compradas, los tipos y el precio total. Y finalmente se lo
enviará al cliente. (Por ejemplo: TOTAL: 2;1;0;1;0: 40 USD)
– Para finalizar la conexión, el cliente escribirá el comando “FIN”, el servidor le
responderá con el mismo mensaje al cliente y finalmente cerrará la conexión del
programa.
– Después de cerrar el programa el servidor se quedará a la espera de nuevas
solicitudes de otros clientes.

Código en Java:
Servidor:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package venta_cine;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import static java.lang.Thread.NORM_PRIORITY;
import java.net.ServerSocket;
import java.net.Socket;

public class Cine_Servidor {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
ServidorCine ServidorCine=new ServidorCine();
}

}
class ServidorCine extends Thread {
// Constructor
ServidorCine() {
// Arrancamos el hilo e invocamos al metodo run() para que empiece
// a correr
start();
}
public void run() {
try {
// Se instancia un objeto sobre el puerto 7
ServerSocket socket = new ServerSocket(1080 );
System.out.println( "Servidor escuchando el puerto 1080" );
// Entramos en bucle infinito ecuchando el puerto. Cuando se
// produce una llamada, se lanza un hilo de ejecucion de
// ConexionEcho para atenderla
while( true )
// Nos quedamos parados en el accept(), y devolvemos un socket
// cuando se recibe la llamada. Este socket es el que se pasa
// como parametro al nuevo hilo de ejecucion que se crea
new ConexionServidor( socket.accept() );
} catch( IOException e ) {
e.printStackTrace();
}
}
}
// Esta clase se utiliza el lanzar un hilo de ejecucion que atienda
// la llamada recibida a traves del puerto 7, el puerto de eco
class ConexionServidor extends Thread {
Socket socket;
// Constructor
ConexionServidor( Socket socket ) {
System.out.println( "Recibida una llamada en el puerto 1025" );
this.socket = socket;
// Trabajamos por debajo de la prioridad de los otros puertos
setPriority( NORM_PRIORITY-1 );
// Se arranca el hilo y se pone a correr
start();
}
public void run() {
System.out.println( "Lanzado el hilo de atencion del puerto 1025" );
BufferedReader entrada = null;
PrintWriter salida = null;
int cont=0;
int cont1=0;
int cont2=0;
try {
String op;
String op1;
// Conseguimos un canal de entrada desde el socket
entrada = new BufferedReader( new InputStreamReader(
socket.getInputStream() ) );
// Conseguimos un canal de salida hacia el socket. El canal es
// con liberaci�n autom�tica (autoflush)
salida = new PrintWriter( new OutputStreamWriter(
socket.getOutputStream()),true );
// Recogemos la cadena que llegue al puerto y la devolvemos en
// el mismo instante

//Desde aqui empieza el Codigo luego de la conexion


String saludo=entrada.readLine();
//Aquie recibe Hola para imprimir y verificar la conexion escribiendo
System.out.println("SERVIDOR:"+saludo);
salida.println(saludo);

do{
op=entrada.readLine();
switch(op){
case "1":
int vol1=cont*20;
int vol2=cont1*10;
int vol3=cont2*5;
int vtotal=vol1+vol2+vol3;
int en_total=cont+cont1+cont2;
salida.println(Integer.toString(en_total));
salida.println(Integer.toString(cont));
salida.println(Integer.toString(cont1));
salida.println(Integer.toString(cont2));
salida.println(Integer.toString(vtotal));
break;

case "2":
cont=cont+1;
String precio="$ 20";
salida.println(precio);
break;

case "3":
cont1=cont1+1;
precio="$ 10";
salida.println(precio);
break;

case "4":
cont2=cont2+1;
precio="$ 5";
salida.println(precio);
break;

case "5":
salida.println(Integer.toString(cont));
if(cont>0){
cont=cont-1;
precio="$ 20";
salida.println(precio);
break;
}
precio="No realizó compras en esta sección";
salida.println(precio);
break;
case "6":
salida.println(Integer.toString(cont1));
if(cont1>0){
cont1=cont1-1;
precio="$ 10";
salida.println(precio);
break;
}
precio="No realizó compras en esta sección";
salida.println(precio);
break;

case "7":
salida.println(Integer.toString(cont2));
if(cont2>0){
cont2=cont2-1;
precio="$ 5";
salida.println(precio);
break;
}
precio="No realizó compras en esta sección";
salida.println(precio);
break;
}
op1=entrada.readLine();
if(op1.equals("fin")){
socket.close();
System.out.println("socket cerrado");
}
}while(op1.equalsIgnoreCase("1"));//repeticion infinita hasta que ponga fin

} catch( IOException e ) {
e.printStackTrace();
}
}
}

Cliente:
package venta_cine;
import java.net.*;
import java.io.*;
import java.util.*;

public class Cine_Cliente {


/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
String servidor = "localhost";
Scanner leer=new Scanner(System.in);
int puerto = 1080; // puerto echo

try {
// Abrimos un socket conectado al servidor y al
// puerto estandar de echo
Socket socket = new Socket( servidor,puerto );
// Conseguimos el canal de entrada
BufferedReader entrada =new BufferedReader( new
InputStreamReader(socket.getInputStream() ) );
// Conseguimos el canal de entrada
PrintWriter salida =new PrintWriter( new
OutputStreamWriter(socket.getOutputStream()),true );

//Desde aqui inicia el codigo luego de la conexion


String cadena="HOLA";
salida.println(cadena);//enviamos al servidor el saludo
//Imprime el HOLA que envia el servidor al cliente
System.out.println("CLIENTE:"+entrada.readLine());
//fin de protocolo Saludo
String op1;
do{
System.out.println("******************");
System.out.println("OPCIONES DEL CINE");
System.out.println("1.- TOTAL Boletos");//COMPRA
System.out.println("2.- COMPRA Boleto");//aNULA
System.out.println("3.- ANULA Boleto");//TOTAL
System.out.println("Digite la opcion requerida");
String op=leer.nextLine();
switch(op){
case "1":
salida.println(op);
System.out.println("**********************");
System.out.println("DETALLES BOLETOS COMPRADOS");
String total= entrada.readLine();
String cont= entrada.readLine();
String cont1= entrada.readLine();
String cont2= entrada.readLine();
String suma=entrada.readLine();
System.out.println("\nTotal de Entradas:"+total+"\nEntradas Vip:"+cont
+"\nEntradas Butaca:"+cont1+"\nEntradas General:"+cont2+"\nValor Total: $
"+suma);
break;

case "2":
System.out.println("*******************");
System.out.println("Precio de la entrada elegida");
System.out.println("1.-Tipo Sala Vip");
System.out.println("2.-Tipo Butaca");
System.out.println("3.-Tipo General");
System.out.println("Digite la opción a realizar");
String opcion=leer.nextLine();
switch(opcion){
case "1":
String aux="2";
salida.println(aux);
System.out.println(" ");
System.out.println("El valor de la compra es:"+entrada.readLine());
break;
case "2":
String aux1="3";
salida.println(aux1);
System.out.println(" ");
System.out.println("El valor de la compra es:"+entrada.readLine());
break;
case "3":
String aux2="4";
salida.println(aux2);
System.out.println(" ");
System.out.println("El valor de la compra es:"+entrada.readLine());
break;
}
break;
case "3":
System.out.println("******************");
System.out.println("Tipo de compra que desea Eliminar");
System.out.println("1.-Tipo Sala Vip");
System.out.println("2.-Tipo Butaca");
System.out.println("3.-Tipo General");
System.out.println("Digite la opción a realizar");
String opcion1=leer.nextLine();
switch(opcion1){
case "1":
System.out.println(" ");
String aux3="5";
salida.println(aux3);
int x=Integer.parseInt(entrada.readLine());
if(x>0){
System.out.println("El valor de la compra eliminada es:"+entrada.readLine());
break;
}
System.out.println(entrada.readLine());
break;
case "2":
String aux4="6";
System.out.println(" ");
salida.println(aux4); ;
int y=Integer.parseInt(entrada.readLine());
if(y>0){
System.out.println("El valor de la compra eliminada es:"+entrada.readLine());
break;
}
System.out.println(entrada.readLine());
break;
case "3":
String aux5="7";
System.out.println(" ");
salida.println(aux5);
int z=Integer.parseInt(entrada.readLine());
if(z>0){
System.out.println("El valor de la compra eliminada es:"+entrada.readLine());
break;
}
System.out.println(entrada.readLine());
break;
}
break;

}
System.out.println(" ");
System.out.println("Elija la opcion: \nVolver al Menu (Digite 1)\nFinalizar la compra
(Digite fin)");
op1=leer.nextLine();
salida.println(op1);
if(op1.equalsIgnoreCase("fin")){
socket.close();
System.out.println("socket cerrado");
System.out.println("Gracias por usar nuestros servicios");
}
}while(op1.equals("1"));

// Cerramos el socket

} catch( UnknownHostException e ) {
e.printStackTrace();
System.out.println("Debes estar conectado para que esto funcione bien." );
} catch( IOException e ) {
e.printStackTrace();
}

// TODO add your handling code here:


}
}
Ejecución del programa:

Cliente:
Servidor:
Análisis de Resultados:
Para realizar el servidor es muy importante hacer varios switch de tal forma de hacer lo
indicado en el enunciado, lo importante es usar variables auxiliares para poder poner
opciones del 1 al 3, guardando en las variables auxiliares valores del 1 al 7 para poder
enviar al cliente y realizar las opciones que debe realizar el cliente.

Se uso un modelo TCP para realizar este programa por la facilidad y comprensión del
mismo.

You might also like