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

Ayuda con sockets

Estas en el tema de Ayuda con sockets en el foro de Java en Foros del Web. Hola a tod@s, Tengo q hacer un proyecto en el cual tengo que usar socket pero me han surgido varias dudas. En el servidor utilizo ...
  #1 (permalink)  
Antiguo 24/04/2006, 14:39
 
Fecha de Ingreso: noviembre-2003
Ubicación: Torrelodones
Mensajes: 134
Antigüedad: 20 años, 6 meses
Puntos: 0
Ayuda con sockets

Hola a tod@s,

Tengo q hacer un proyecto en el cual tengo que usar socket pero me han surgido varias dudas. En el servidor utilizo el ACCEPT para cuando entra un cliente pero cuando se que ese cliente que ha entrado se ha salido?? El servidor que he realizado es el siguiente

ServerSocket skServidor = new ServerSocket( PUERTO );

while(true){

Socket skCliente = skServidor.accept();
System.out.println("Entro un cliente ");

//Recoge lo que el cliente ha enviado
InputStream entrada=skCliente.getInputStream();
DataInputStream entradaDatos = new DataInputStream (entrada);
String seccion="";
seccion=entradaDatos.readUTF();
System.out.println(seccion);

if(seccion.equalsIgnoreCase("registrar")){
anadir_usuario(skCliente);

}else if(seccion.equalsIgnoreCase("autentificar")){
autentificar_usuario(skCliente);
}

System.out.println("Se removio un usuario");
skCliente.close();

}

Con este codigo cada vez que entra un cliente se elimina pero yo no quiero eso, yo quiero mantenerlo conectado en el servidor hasta que se desconecte él. Es como un chat. Como podria hacerlo

Muchas gracias por su ayuda
Un saludo
__________________
Conoce gente nueva, haz amigos, aplicaciones para moviles, juegos online,... Y todo gratis!!! :si: www.cuelate.com
  #2 (permalink)  
Antiguo 24/04/2006, 16:21
 
Fecha de Ingreso: marzo-2006
Mensajes: 61
Antigüedad: 18 años, 1 mes
Puntos: 0
Tienes que hacerlos con hebras asi por cada cliente que se conecte se creara una hebra.
  #3 (permalink)  
Antiguo 24/04/2006, 16:27
 
Fecha de Ingreso: noviembre-2003
Ubicación: Torrelodones
Mensajes: 134
Antigüedad: 20 años, 6 meses
Puntos: 0
Antes de nada muchas gracias por contestar. Me podrias explicar un poco mas o darme alguna buena direccion que lo explique...es q soy mu nuevo y no se ni lo q es eso de las hebras
__________________
Conoce gente nueva, haz amigos, aplicaciones para moviles, juegos online,... Y todo gratis!!! :si: www.cuelate.com
  #4 (permalink)  
Antiguo 24/04/2006, 17:32
Avatar de dogduck  
Fecha de Ingreso: enero-2006
Ubicación: ¿Atlantida, Hesperides, Islas afortunadas?
Mensajes: 2.231
Antigüedad: 18 años, 4 meses
Puntos: 19
hebras = hilos => Clase thread

http://java.sun.com/j2se/1.5.0/docs/...ng/Thread.html

http://club.idecnet.com/~ccastano/femepa/231105.htm
  #5 (permalink)  
Antiguo 25/04/2006, 01:20
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Hola:

Si solo tienes un cliente, no necesitas hilos (hebras). Coloca el bucle while de esta otra forma

while (true)
{
Socket cliente = socket.accept()
while (noDesconectado)
{
cliente.read()
tratar mensaje
}
cliente.close();
}

Sabrás que el cliente se ha desconectado cuando el cliente.read() te salte una excepcion o te devuelva un null, 0, -1 o cualquier cosa de que no ha leido nada. Pongo read() por simplificar, pero tendrías que usar para leer los métodos que estás usando ahora.

Si tienes varios clientes a la vez, entonces sí debes usar hilos, un hilo para cada cliente. La idea es similar, pero el bucle while(noDesconectado) y el cliente.close() debes meeterlo en un hilo.

Haz una clase que implemente Runnable, mete en el metodo run() el while(noDesconectado) y el cliente.close(), pásale en el constructor y para que se lo guarde todo lo que necesites (socket cliente, datos, etc). Si esta clase se llama HiloCliente, luego haces esto

while (true)
{
Socket cliente = socket.accept()
Thread hilo = new Thread(new HiloCliente(cliente,...));
hilo.start();
}

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #6 (permalink)  
Antiguo 25/04/2006, 04:27
 
Fecha de Ingreso: noviembre-2003
Ubicación: Torrelodones
Mensajes: 134
Antigüedad: 20 años, 6 meses
Puntos: 0
Muchas gracias por sus explicaciones, me ha quedado claro (por ahora :p). Ya les estare preguntado dentro de nada mas cosas porque ando perdido con esto del java, jeje
__________________
Conoce gente nueva, haz amigos, aplicaciones para moviles, juegos online,... Y todo gratis!!! :si: www.cuelate.com
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 10:52.