No me funciona el codigo. Ayuda porfa
Publicado por Pacheco (1 intervención) el 15/11/2015 11:41:13
MAIN.JAVA
HILOSERVIDOR.JAVA
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
package Servidor;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField;
/*
* Este ejemplo ilustra el funcionamiento de los sockets Streams orientados a conexión con
* servidor concurrente (multi-thread).
* @author David Lizcano
*/
public class Main{
// El servidor recibe una petición del cliente y envia una respuesta con una marca de tiempo.
// El cliente pide un texto al usuario por consola, y dicho texto se envía al servidor, que recibe el texto,
// indica la hora a la que lo ha recibido y se lo devuelve al cliente para que lo muestre por pantalla.
// Se emplea un servidor concurrente con un hilo por cada cliente
// El servidor necesita 1 argumento por consola:
// <puerto al que enlazar el socket servidor de tipo stream del servidor>
// Nótese que no es necesario saber nada del proceso A (direccion ni puerto) gracias al método accept
// del ServerSocket
public static void main(String[] args) {
InputStreamReader is = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(is);
Integer puerto_B;
try {
System.out.println("Bienvenido al servidor concurrente.\n" +
"Introduzca el puerto en el que aceptar conexiones");
String puertoB = br.readLine();
if (puertoB.length() == 0)
puertoB = "3000"; // puerto B por defecto;
puerto_B = Integer.parseInt (puertoB); //cambio de tipos necesario
ServerSocket socketAceptador = new ServerSocket (puerto_B);
while(true)
{
System.out.println("Esperando conexión.");
Socket socketDatos = socketAceptador.accept(); //operacion bloqueante
System.out.println("Conexión aceptada");
// preparamos el flujo de datos sobre el que leer y escribir, tomandolo del socketDatos creado
Thread hilo = new Thread(new HiloServidor(socketDatos));
hilo.start();
//fin del bucle y volvemos a aceptar dar servicio a otros clientes de forma concurrente
} //end while
} // end try
catch (Exception ex) {
ex.printStackTrace( );
} //end catch
}
public static Vector socketsActivos = new Vector();
private Object Socket;
{
socketsActivos.addElement(Socket);
}
public void enviarATodos (String mensaje){
Vector lista = socketsActivos;
for(int i = 0; i < lista.size(); i++){
Socket socketDatos = (Socket) lista.get(i);
//enviar mensaje por socketDatos
}
}
}
HILOSERVIDOR.JAVA
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
package Servidor;
import static Servidor.Main.socketsActivos;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Date;
import java.util.Vector;
/*
* Hilo encargado de dar servicio a un cliente particular
* @author david.lizcano
*/
class HiloServidor implements Runnable {
Socket socketDatos;
HiloServidor(Socket socketConectado){
socketDatos = socketConectado;
}
public void run (){
try {
String mensaje = "";
PrintWriter output = new PrintWriter(new OutputStreamWriter(socketDatos.getOutputStream()));
BufferedReader input = new BufferedReader(new InputStreamReader(socketDatos.getInputStream()));
// leemos una linea, con operacion bloqueante
while (true){
mensaje = input.readLine();
Date marca_temporal = new Date();
String marca = "Momento de Recepción = " + marca_temporal.toString() + ", datos = ";
String respuesta = marca + mensaje;
Thread.sleep (3000); // comprobamos que el hilo del cliente evita el bloqueo en la espera
output.println(respuesta);
output.flush();
}
}
catch (Exception ex) {
ex.printStackTrace( );
} //end catch
}
}
Valora esta pregunta


0