elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  sockets + java?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: sockets + java?  (Leído 4,197 veces)
coolfrog


Desconectado Desconectado

Mensajes: 324


Ver Perfil WWW
sockets + java?
« en: 11 Octubre 2005, 22:59 pm »

que tal, alguien sabe como hacer una clase(servidor) que devuelva mensajes a muchos clientes.
y otra cosa mas cual es la diferencia de los streams (DataInputStream,BufferedReader, InputStreamReader y otros.....).

Yo utilizo para redes el DataInputstream, pero he visto muchos ejemplos que lo hacen con el Buffer.... y otros que no conozco.



En línea

AnKeR

Desconectado Desconectado

Mensajes: 125


printk("\n%s\n","Kernel Panic");


Ver Perfil
Re: sockets + java?
« Respuesta #1 en: 12 Octubre 2005, 00:06 am »

No se si entiendo muy bien la primera parte ... mensajes a muchos clientes supongo que será un servidor que pueda dar servicio a varios a la vez... Pos para eso pues creas un thread distinto para cada conexión nueva que te creen al puerto que tienes abierto.

Pues la diferencia entre los streams es mas o menos la manera que tiene de leer, o de trabajar por ejemplo el BufferedOutputStream -> no escribe hasta que se llena un buffer de un tamaño concreto... Pero cada stream es distinto eso lo mejor que puedes hacer es ir a la API de Java que es una gozada y leerte un poquillo todas esas movidillas.

Salu2o3


En línea

coolfrog


Desconectado Desconectado

Mensajes: 324


Ver Perfil WWW
Re: sockets + java?
« Respuesta #2 en: 13 Octubre 2005, 05:21 am »

ya entiendo mas o menos eso, ahora  mis dudas especificas las voy a poner en codigo y voy a ir explicandolas.
primero que nada tengo mi clases servidor y cliente .
la clase servidor como crea un nuevo thread cada vez que se conecta un usuario:
Código:
public static void main(String abc[]) throws IOException{
ServerSocket serv=null;
boolean listening=true;
servidor s=new servidor();
try{
serv=new ServerSocket(4444);
        System.out.println(".::Servidor activo :");
      [color=Yellow] while(listening)[/color]{
          Socket sock=null;
        try {
           sock=serv.accept();//espera hasta que se conecte un cliente
            } catch (IOException e) {
                System.err.println("Accept failed: " + 4444 + ", " + e.getMessage());
                continue;
            }
            nuevocliente k=new nuevocliente(sock); //este es la instancia a la clase thread
        k.start();
        }
       
    }catch(IOException e){
System.out.println("error :"+e);
}
}

ahora mi duda en esta parte es , que cuando hace el "while(listening)" que pasa?
cuando sale de ese bucle?
cuando entra al catch?

Ahora la clase del Thread es esta:

Código:
class nuevocliente extends Thread{
Socket scli=null;
DataInputStream entrada=null;
DataOutputStream salida=null;
private static Vector clientesActivos=new Vector();
public nuevocliente(Socket scliente){
scli=scliente;
clientesActivos.addElement(this);
System.out.println("cliente agregado: "+this);
}
public void run() {
System.out.println(".::Esperando Mensajes :");
String mencli;
try{
entrada=new DataInputStream(scli.getInputStream());
    salida=new DataOutputStream(scli.getOutputStream());
     } catch (IOException e) {
            e.printStackTrace();
        }
        try{
  [color=red] while((mencli=entrada.readLine())!=null) [/color]{
    System.out.println("mensaje recibido "+mencli);
            envia(mencli);
       }
       } /*catch (IOException e) {
            e.printStackTrace();
        }*/
       
    catch (Exception e1){
if (e1.getMessage().equals("Connection reset by peer: JVM_recv" +
" in socket input stream read")){
System.out.println("se desconecto un cliente");
}
}
finally {clientesActivos.removeElement(this);
try{
scli.close();
}
catch(Exception e3){
System.out.println("no se puede cerrar el socket");
       
       
     }
     }
     }
     

public void envia(String mencli2){
//InetAddress carac=new InetAddress(get);
String IP=scli.getInetAddress().getHostAddress();//IP
//String host=scli.getInetAddress().getHostName();//nombre del la maquina

for(int i=0;i<clientesActivos.size();i++){
System.out.println("MENSAJE DEVUELTO "+i);
try{
[color=red] ((nuevocliente)(clientesActivos.elementAt(i))).salida.writeBytes(IP+/*":"+host+*/" dice:"+ mencli2+[color=blue]"\n"[/color]);[/color]
}catch (IOException e) {
            e.printStackTrace();
        }

}
}
}


Las dudas en esta parte son, "while((mencli=entrada.readLine())!=null) " , que hace aqui? , por que yo vi otra forma en otros ejemplos, colocan "while(true)" ,asi:
Código:
while (true){
try{ 
        mencli=entrada.readLine();
System.out.println("llego del Cliente :"+c+" "+mencli);
salida.writeBytes(dato+"\n");
}catch (IOException e){
    System.out.println("error...."+e);
break;
}

y otra cosa mas , por que es necesario el fin de linea esto ->"\n"" cuando quiero enviar datos de salida?
por que si no coloco eso , no pasa nada.
la parte del codigo es esta:

((nuevocliente)(clientesActivos.elementAt(i))).salida.writeBytes(IP+/*":"+host+*/" dice:"+ mencli2+"\n");
 
ah tambien en esta misma linea , exactamente como funciona
, eso de ((nuevocliente)(clientesActivos)) es algun tipo de casting o que?
por que , yo defini clientesActivos como variable global y cuando quiero hacer lo mismo pero sin el (nuevocliente) por delante, no me sale.
   

Todo lo anterior era lo del Servidor .
Ahora la parte del cliente :
Código:
class cliente{
static String mensaje;
static String mensajeCliente;
public static void main(String abc[]) throws IOException {
Socket sock=null;
DataInputStream entrada=null;
DataOutputStream salida=null;
DataInputStream entrada2=new DataInputStream(System.in);

cliente s=new cliente();
try{
sock=new Socket("127.0.0.1",4444);
entrada=new DataInputStream(sock.getInputStream());
salida=new DataOutputStream(sock.getOutputStream());
}catch(IOException e){
System.out.println("\tEl servidor no esta levantado");
System.out.println("\t=============================");

}
System.out.println("es :"+sock.toString());
new threadCliente(entrada).start();
System.out.print("Introducir Mensaje Para El Servidor :");
while (true){
try{

mensajeCliente=entrada2.readLine();
salida.writeBytes(mensajeCliente+"\n");

}catch (IOException e){
    System.out.println("error...."+e);
break;
}

}

}

}
class threadCliente extends Thread{
DataInputStream entrada2;
public threadCliente (DataInputStream entrada) throws IOException{
entrada2=entrada;
}
public void run(){
String menser;
try{
while((menser=entrada2.readLine())!=null){

System.out.println(/*"ECO del servidor:"+*/menser);
}
}
catch (IOException e){
System.out.println("Error en la comunicación "+"Información para el usuario");
}
finally {
System.exit(0);
}
}
}

Ahora , mas o menos se como funcionan los Threads(pero si quisieran explicarme un poco mas no hay problema).
La clase servidor crea un nuevo Thread cada vez que se conecta un cliente, y va almacenando los clientes en un Vector, para despues enviarles los mensajes a todos.
Ahora yo creia que solo se necesitaba eso pero lo que no entiendo es por que tengo que crear otro Thread en el cliente?
que no es suficiente con el que utiliza el Servidor?

les pido que respondan los mas rapido porfavor, es un proyecto , y el docente no quiere ayudar.

gracias de antemano.

En línea

coolfrog


Desconectado Desconectado

Mensajes: 324


Ver Perfil WWW
Re: sockets + java?
« Respuesta #3 en: 23 Octubre 2005, 05:25 am »

Bueno parace que nadie sabe.
Pero igual , a los que esten interesados ya hice un chat publico , al cual pueden conectarse varios clientes , no acepta privados , y esta en modo grafico.
si quieren que les indique solo postean o me escriben.
bueno ciao.

PD: Y a ver quien me saca esas dudas que tengo.

el link para los que quieren descargar es :

Código:
http://parti.shinranet.com/chat3.rar
« Última modificación: 25 Mayo 2007, 08:36 am por coolfrog » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ayuda con sockets en java
Java
vincentlaw 1 4,334 Último mensaje 23 Octubre 2012, 15:50 pm
por cruz_lazcano
Sockets en Java
Java
mapers 3 4,156 Último mensaje 11 Julio 2011, 10:22 am
por Debci
Duda con sockets en java
Java
fekaa30 1 2,496 Último mensaje 8 Octubre 2012, 21:31 pm
por Proteus1989
¿ Como transferir un fichero por sockets con java - Jframe ?
Java
arts 2 2,602 Último mensaje 24 Febrero 2014, 20:58 pm
por arts
Chat en Java con Sockets
Java
Elliot123 1 2,355 Último mensaje 3 Mayo 2018, 17:30 pm
por srWhiteSkull
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines