Foros del Web » Programación para mayores de 30 ;) » Java »

Como hacer este soket acepte más de un cliente

Estas en el tema de Como hacer este soket acepte más de un cliente en el foro de Java en Foros del Web. Hola normalmente leo este foro pero no me he registrado hasta ahora. Estoy empezando en el mundo de java y no se como resolver este ...
  #1 (permalink)  
Antiguo 03/10/2013, 16:55
 
Fecha de Ingreso: octubre-2013
Mensajes: 2
Antigüedad: 10 años, 6 meses
Puntos: 0
Como hacer este soket acepte más de un cliente

Hola normalmente leo este foro pero no me he registrado hasta ahora. Estoy empezando en el mundo de java y no se como resolver este problema. Este codigo es para un socket para comunicarse entre dos pcs como un chat. Mi pregunta es, ya que funciona como cliente servidor, cómo hacer que acepte más de un cliente, es decir, hacerlo multihilo?

Código:
import java.net.ServerSocket;
import java.net.Socket;


public class ServidorDiccionario {

public static int PUERTO = 22222;
public static String DICCIONARIO_POR_DEFECTO = "general"; // Nombre del diccionario por defecto (usa el fichero "general.dic")

public static void main(String[] args) {
Diccionario diccionarioGeneral = new Diccionario(DICCIONARIO_POR_DEFECTO);
diccionarioGeneral.cargar(); // Cargar contenido del diccionario

Socket conexionCliente; // Socket con la conexión al cliente
GestorCliente gestor; // Objeto al que se delega la gestión del diálogo con el cliente
try {
System.out.println("SERVIDOR. creando socket de escucha en puerto " + ServidorDiccionario.PUERTO);
ServerSocket conexion = new ServerSocket(ServidorDiccionario.PUERTO)…

while (true) { // Bucle aceptando conexiones
System.out.print("SERVIDOR. esperando conexion ... ");
conexionCliente = conexion.accept();	// El objeto de tipo ServerSocket acepta la conexion una vez identifica datos de // llegada en el puerto de escucha. El metodo accept() devuelve un objeto de tipo // socket (es decir, la conexion TCP con el cliente) y deja el canal de comunicacion // BLOQUEADO!!!
System.out.println(" cliente conectado");

// Crea un "gestorCliente" que procesara las peticiones del cliente
gestor = new GestorCliente(conexionCliente, diccionarioGeneral);
gestor.dialogoCliente();
// Fin conexion
conexionCliente.close();
}
} catch (Exception e) {
System.err.println("ERROR en conexion del servidor.");
System.err.println(e.getMessage());
System.exit(0);
}
}

}
No se por donde empezar, ¿talvez modificando el bucle para recibir infinitas peticiones? Agradeceria si me podeis orientar un poco.

Un saludo y gracias.
  #2 (permalink)  
Antiguo 04/10/2013, 04:28
 
Fecha de Ingreso: febrero-2011
Mensajes: 672
Antigüedad: 13 años, 2 meses
Puntos: 78
Respuesta: Como hacer este soket acepte más de un cliente

Para aceptar más de un cliente en tu socket server, lo único que debes hacer es enviar a un hilo el cliente que te acaba de llegar. De esta manera no bloqueas la comunicacion con la llegada del cliente, tu bucle de escucha del servidor continua y la comunicacion del cliente con tu servidor la tienes en un hilo. El siguiente cliente que se conecte, lo enviarás a otro hilo y así sucesivamente. En cada hilo tendrás a un cliente conectado con tu servidor.

Saludos
  #3 (permalink)  
Antiguo 04/10/2013, 07:51
 
Fecha de Ingreso: octubre-2013
Mensajes: 2
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Como hacer este soket acepte más de un cliente

Como puedo "enviarlo"? Referenciandolo?
  #4 (permalink)  
Antiguo 04/10/2013, 08:04
 
Fecha de Ingreso: febrero-2011
Mensajes: 672
Antigüedad: 13 años, 2 meses
Puntos: 78
Respuesta: Como hacer este soket acepte más de un cliente

Por ejemplo, puedes tener una clase a parte cuyo constructor acepte el socket cliente y un hilo preparado para correr haciendo uso de este socket cliente.

De esta manera, cada vez que el server reciba un cliente se irá generando un hilo nuevo con su propio socket cliente.

Saludos.

Etiquetas: cliente, metodo, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:01.