Programación multihilo con sockets
Publicado por Josh (5 intervenciones) el 24/01/2019 11:45:39
Por favor alguien me puede echar una mano para implementar el hilo de esta tarea?, la aplicación cliente y servidor ya está creada, he adjuntado los archivos de los dos programas, servidor y cliente.
En esta tarea hay que crear dos aplicaciones, un cliente de un almacén y un servidor de un almacén de chirimoyas:
• 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.
• Al arrancar las aplicaciones, tanto la aplicación cliente como la aplicación servidor, deben mostrar por consola la siguiente información:
********************************************************
* PSP - Tarea Individual 4 - Cliente / Servidor *
********************************************************
* Nombre y apellidos del Alumno *
********************************************************
* DNI del alumno *
********************************************************
• 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.
Servidor...
Cliente
En esta tarea hay que crear dos aplicaciones, un cliente de un almacén y un servidor de un almacén de chirimoyas:
• 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.
• Al arrancar las aplicaciones, tanto la aplicación cliente como la aplicación servidor, deben mostrar por consola la siguiente información:
********************************************************
* PSP - Tarea Individual 4 - Cliente / Servidor *
********************************************************
* Nombre y apellidos del Alumno *
********************************************************
* DNI del alumno *
********************************************************
• 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.
Servidor...
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
package psp_t04_servidor_sockets;
import java.io.BufferedReader;
import java.io.*;
import java.net.*;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author <your.name at your.org>
*/
public class PSP_T04_servidor_sockets {
public static void main(String[] args) {
try {
//Mantener conexión mientras salir sea false
boolean salir = false;
int puerto = 9090;
//Creamos un ServerSocket a la escucha que acepta como parámetro el puerto a conectar
ServerSocket servidor = new ServerSocket(puerto);
System.out.println("Esperando conexión del cliente...");
//Creamos un objeto de la clase socket que aceptará una conexión cliente entrante
Socket cliente = servidor.accept();
//Creamos flujo de entrada para recibir información del cliente
BufferedReader recibir = new BufferedReader(new InputStreamReader(cliente.getInputStream()));
//Creamos un flujo de salida
PrintWriter enviar = new PrintWriter(cliente.getOutputStream(),true);
while(!salir){
//Esperar a recibir informacion por el flujo de entrada
String comando = recibir.readLine();
System.out.println("Comando recibido: " + comando);
//Switch para los comandos que teclee el cliente
switch(comando){
case "salir":
salir = true;
break;
default:
enviar.println("Comando no reconocido.");
System.out.println("Comando no reconocido.");
break;
}
}
cliente.close();
servidor.close();
} catch (IOException ex) {
Logger.getLogger(PSP_T04_servidor_sockets.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package psp_t04_cliente_sockets;
import java.io.*;
import java.net.*;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author <your.name at your.org>
*/
public class PSP_T04_cliente_sockets {
public static void main(String[] args) {
try {
//Creamos una variable para los comandos a introducir
String comando = "";
String direccionIp ="127.0.0.1";
int puerto =9090;
//Creamos un flujo de entrada de datos para teclado
BufferedReader lectorDeComandos = new BufferedReader(new InputStreamReader(System.in));
//El cliente debe conocer la dirección ip y el puerto de conexión
//Hay que solicitarla para establecer la conexión
System.out.println("Introduzca la dirección ip del servidor: [127.0.0.1]");
comando = lectorDeComandos.readLine();
if (!comando.equalsIgnoreCase("")){
direccionIp = comando;
}
System.out.println("Introduzca el puerto al que conectarse: [9090]");
comando = lectorDeComandos.readLine();
if(!comando.equalsIgnoreCase("")){
puerto = Integer.parseInt(comando);
}
//Pasamos la ip y el puerto al socket
Socket cliente = new Socket(direccionIp, 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()));
while(!comando.equalsIgnoreCase("salir")){
System.out.println("");
System.out.println("Por favor, introduzca un comando: ");
comando = lectorDeComandos.readLine();
enviar.println(comando);
System.out.println(recibir.readLine());
}
} catch (IOException ex) {
Logger.getLogger(PSP_T04_cliente_sockets.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
- PSP_T04.zip(36,2 KB)
Valora esta pregunta


0