
Aplicacion Sockets Tienda
Publicado por Paco (4 intervenciones) el 02/12/2021 18:41:39
Buenas Tardes, alguien por favor me podria ayudar con esta tarea:
En esta tarea hay que crear dos aplicaciones, un cliente de un almacén y un servidor de un almacén de chirimoyas:
-Han de crearse dos proyectos java, uno con la clase cliente y otro con la clase servidor.
• La aplicación cliente implementará una conexión de red por medio de sockets.
• El usuario debe poder insertar una dirección IP y un puerto al que conectarse
• La aplicación cliente creará un hilo que se encargará de todo el proceso de la comunicación con el servidor, permitiendo al hilo principal encargarse de la comunicación con el usuario
• La aplicación cliente debe permitir al usuario consultar el número de chirimoyas que hay almacenadas. Además, debe permitirle añadir chirimoyas y reducir el número de las mismas.
• La aplicación servidor debe ser capaz de recibir conexiones por medio de la red. Al arrancar la aplicación nos debe permitir seleccionar el puerto en el que queremos iniciar el servicio.
• El servidor tendrá un stock inicial de chirimoyas que el usuario insertará al iniciar la aplicación.
• La aplicación servidor permitirá únicamente una conexión simultánea, para la cual usará un hilo de ejecución, dejando al hilo padre la posibilidad de que un usuario consulte el estado del almacén.
• La aplicación cliente mostrará el listado de opciones que se permite realizar, véase consultar, insertar y retirar.
• La aplicación servidor permitirá una única opción, consultar.
• Cada vez que se realice una operación por parte del cliente, el servidor mostrará información de lo que está ocurriendo.
Esto es lo que tengo hecho pero no consigo conectar los mensajes del cliente al servidor.
Clase Servido
Clase Cliente:
En esta tarea hay que crear dos aplicaciones, un cliente de un almacén y un servidor de un almacén de chirimoyas:
-Han de crearse dos proyectos java, uno con la clase cliente y otro con la clase servidor.
• La aplicación cliente implementará una conexión de red por medio de sockets.
• El usuario debe poder insertar una dirección IP y un puerto al que conectarse
• La aplicación cliente creará un hilo que se encargará de todo el proceso de la comunicación con el servidor, permitiendo al hilo principal encargarse de la comunicación con el usuario
• La aplicación cliente debe permitir al usuario consultar el número de chirimoyas que hay almacenadas. Además, debe permitirle añadir chirimoyas y reducir el número de las mismas.
• La aplicación servidor debe ser capaz de recibir conexiones por medio de la red. Al arrancar la aplicación nos debe permitir seleccionar el puerto en el que queremos iniciar el servicio.
• El servidor tendrá un stock inicial de chirimoyas que el usuario insertará al iniciar la aplicación.
• La aplicación servidor permitirá únicamente una conexión simultánea, para la cual usará un hilo de ejecución, dejando al hilo padre la posibilidad de que un usuario consulte el estado del almacén.
• La aplicación cliente mostrará el listado de opciones que se permite realizar, véase consultar, insertar y retirar.
• La aplicación servidor permitirá una única opción, consultar.
• Cada vez que se realice una operación por parte del cliente, el servidor mostrará información de lo que está ocurriendo.
Esto es lo que tengo hecho pero no consigo conectar los mensajes del cliente al servidor.
Clase Servido
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
public class ServidorAlmacen {
private int stock;
private final ServerSocket servidor;
private volatile boolean cancel = false;
public ServidorAlmacen(int stock) throws IOException {
this.stock = stock;
servidor = new ServerSocket(5037);
}
public void iniciar() throws IOException {
BufferedReader cin = new BufferedReader(new InputStreamReader(System.in));
String local;
Thread client = new Thread() {
public void run() {
boolean stop = false;
int req=2;
try {
while(!cancel) {
Socket socket = servidor.accept();
ObjectOutputStream os = new ObjectOutputStream(socket.getOutputStream());
ObjectInputStream is = new ObjectInputStream(socket.getInputStream());
while(!stop) {
String cmd = is.readUTF();
switch(cmd) {
case "consultar":
os.writeInt(stock);
break;
case "retirar":
req = is.readInt();
os.writeInt(cambiarStock(-req));
break;
case "cerrar":
stop = true;
os.writeInt(0);
socket.close();
break;
default:
os.writeInt(-1);
}
}
}
} catch(IOException ex) {
if(!cancel) {
Logger.getLogger(ServidorAlmacen.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
};
System.out.println("Servidor aceptando peticiones en puerto 5037");
client.start();
while(!cancel) {
local = cin.readLine();
switch(local) {
case "consultar":
System.out.printf("Stock: %d\n", stock);
break;
case "cerrar":
cancel = true;
client.interrupt();
break;
default:
System.out.println("Don't grok!");
}
}
System.exit(0);
}
private synchronized int cambiarStock(int cantidad) {
if((stock + cantidad) < 0) {
return -1;
}
stock += cantidad;
return stock;
}
public static void main(String args[]) throws IOException {
Scanner sc=new Scanner(System.in);
System.out.println("Introduzca el stock inicial de chirimoyas: ");
int numero=sc.nextInt();
new ServidorAlmacen(numero).iniciar();
}
Clase Cliente:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
public class ClienteAlmacen {
public static void main(String[] args) {
ClienteAlmacen cliente = new ClienteAlmacen();
cliente.iniciar();
}
public void iniciar() {
try {
//Creamos una variable para los comandos a introducir
String comando = "";
String direccionIp = "127.0.0.1";
String puerto = "5037";
//Creamos un flujo de entrada de datos para teclado
// Variable para leer los comando del usuario
BufferedReader buffer = new BufferedReader(
new InputStreamReader(System.in));
System.out.print(
"Introduce la dirección ip del servidor [127.0.0.1]: ");
direccionIp = buffer.readLine();
if (direccionIp.equals("")) {
direccionIp = "127.0.0.1";
}
System.out.print("Introduce el puerto al que conectarse [5037]: ");
puerto = buffer.readLine();
if (puerto.equals("")) {
puerto = "5037";
}
//El cliente debe conocer la dirección ip y el puerto de conexión
//Hay que solicitarla para establecer la conexión
//Pasamos la ip y el puerto al socket
Socket cliente = new Socket(direccionIp, parseInt(puerto));
System.out.println("Conexión establecida.");
//Flujo salida para poder enviar informacion al servidor
PrintWriter enviar = new PrintWriter(cliente.getOutputStream(), true);
//Flujo entrada para recibir la información del servidor
BufferedReader recibir = new BufferedReader(new InputStreamReader(cliente.getInputStream()));
System.out.println("Conexion establecida con el servidor.");
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
Valora esta pregunta


0