Professional Documents
Culture Documents
CARRERA DE:
INGENIERÍA ELECTRÓNICA EN TELECOMUNICACIONES
DEBER 2_2
EJERCICIOS
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).
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;
/**
* @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
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.*;
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 );
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();
}
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.