Socket Java

Iniciado por juancho77, 4 Octubre 2008, 10:04 AM

0 Miembros y 1 Visitante están viendo este tema.

juancho77

Estoy haciendo un programa que implementa las clases Socket y ServerSocket de Java.net.
En la parte del cliente tengo una sección del programa para ingresar usuario y password y conectarse al servidor. El socket se conecta, hace el chequeo contra una tabla y permite el ingreso o no. Luego de esto (que lo hace bien) necesito que el socket siga conectado para seguir intercambiando informacion con el servidor.
Mi pregunta es como puedo hacer para crear una sola instancia del socket en la clase del cliente, y que de esa forma se quede conectada esa instancia mientras este abierta la aplicacion?

Si no se me entendio nada, pero alguien sabe de sockets, me gustaria intercambiar algunas ideas por msn o mail.
MSN = juanvillegas_77@hotm...com
Mail = juanvillegas@bvconline.com.ar

Erik#

Hoy en dia solo pensais en la plataforma Windows, porque no extendeis vuestros conocimientos hacia un mundo de plataformas independientes?

juancho77

CitarHoy en dia solo pensais en la plataforma Windows, porque no extendeis vuestros conocimientos hacia un mundo de plataformas independientes?

Que tiene que ver esto con mi consulta? Que costumbre de algunos escribir algo por escribir.

Por lo que veo, no tenes conocimientos en java. De hecho, estoy escribiendo el codigo desde Ubuntu Gutsy y el programa funciona perfectamente, DADO QUE JAVA Y GRAN PARTE DE SUS LIBRERIAS SON MULTIPLATAFORMA.  :D



egyware

Da igual en que plataforma se trabaje, ya que java es multiplataforma e independiente del OS.

Primero en tu programa Servidor, lo pones a la escucha.
Listo
El Programa cliente se conecta al Servidor
le envia el user y el password a travez de socket.getOutputStream() (usa mejor BufferedWriter)
El Servidor recibe el user y el pass de una conexión(socket) usando socket.getInputStream() (usa mejor Scanner o BufferedReader), lo verifica en alguna tabla y le responde "ok" (create algun protocolo de comunicacion)
sino le responde "wrong user/pass" y puedes cerrar la conexión o esperar que ingrese de nuevo el user y password
Que tengas un buen día


cyberserver

Ola amigos si alguien me pudiera pasar un manual de como  usar los sockets en java se lo agradecere mucho!!!!

Y si la neta no tiene nada k ver Java con eso de los So pues java es multiplataforma y siempre a existido una maquina VIRTUAL!!! de java!!! chale






joseprox

Aqui les paso un Codigo de un servidor.java con ServerSocket....está completamente sencillo.....lo que no entiendad pregunten.................................


-------------------------------------------------------
/***********************************************************************
                          servidor.java
************************************************************************
aplicacion servidora del chat simple desarrollado en java.
compilar con :
                javac servidor.java
ejecutar con :
                java servidor
***********************************************************************/

// Librerias Necesarias
import java.awt.*;     // modo grafico
import java.io.*;      // entrada/salida
import java.net.*;     // funciones de red

public class servidor extends Frame {

// elementos de la ventana
static Button enviar = new Button("Enviar");
static Button cerrar = new Button("Cerrar");
static TextArea texto = new TextArea(10,40);
static TextField mensaje = new TextField(40);

// Componentes de la comunicacion
static ServerSocket  servido;        // socket servidor
static Socket cliente;               // socket para manejar los clientes
static String mensa = "";
static PrintStream ps;               // flujo de salida
static DataInputStream datos;        // flujo de entrada
   
// funcion principal
public static void main( String args[]) {

     // crear instancia ventana
     new servidor();

     // crear socket servidor en el puerto 5000
     // se puede cambiar a nuestro gusto
     try{
        servido = new ServerSocket(5000);
     // error al crear el servidor
     }catch (IOException e) {
        System.out.println("Error al crear el Socket Servidor");
        System.exit(1);
     };

    // ciclo para el tratamiento de los clientes
    do{
      try{

        texto.append("Esperando Cliente ...\n");

        //esperar cliente
        cliente = servido.accept();
        activar();
        texto.append("Llego un cliente. Respondele ...\n");

        // inicializacion de las estructuras para la lectura/escritura
        // con los datos del cliente
        ps = new PrintStream(cliente.getOutputStream());
        datos = new DataInputStream(cliente.getInputStream());

        // ciclo de recepcion de mensajes
        while((mensa = datos.readLine()) != null){
           texto.append("Cliente dice : "+mensa+"\n");
        };

        texto.append("\nTerminando la conexion con el cliente.\n");
        cerrarconexion();
        texto.append("\nEl cliente se ha desconectado.\n");

     }catch (IOException e) {
        texto.append("Error de Lectura / Escritura en los Sockets\n");
        desactivar();
     };
    }while(true); // ciclo infinito. se desconecta un cliente y esperamos
                  // otro. para salir debemos dar click en el boton cerrar
  }

// funcion que grafica
public servidor() {

     // titulo de la ventana
     setTitle("Java Chat Servidor");

     // elementos de la ventana
     Panel pan = new Panel();
     pan.add(enviar);
     pan.add(cerrar);

     Panel pan1 = new Panel();
     pan1.add(mensaje);

     Panel pan2 = new Panel();
     pan2.add(texto);

     add("North",pan2);
     add("Center",pan1);
     add("South",pan);

     enviar.disable();
     texto.disable();
     mensaje.disable();

     // tama¤o constante
     setResizable(false);

     // organizar y mostrar
     pack();
     show();
  }

public boolean action(Event ev, Object arg) {
 
   // eventos en los botones

   // click en el boton cerrar
   if((ev.target == cerrar)&&(ev.id == 1001)){
       cerrarconexion();
       System.exit(0);
    }
   // click en el boton enviar
   if((ev.target == enviar)&&(ev.id == 1001)){
      if(!mensaje.getText().equals("")){
         ps.println(mensaje.getText());
         texto.append("Servidor dice : "+mensaje.getText()+"\n");
         mensaje.setText("");
       }
    }
   return(true);
}

// esta funcion habilita los elementos de la ventana
public static void activar(){
     enviar.enable();
     mensaje.enable();
  }

// esta funcion deshabilita los elementos de la ventana
public static void desactivar(){
     enviar.disable();
     mensaje.disable();
  }

// funcion que cierra la conexion con el cliente
public static void cerrarconexion(){
     try{
         cliente.close();
     }catch(IOException e){
         texto.append("Error al cerrar el cliente");
     };
     desactivar();
}
}

-------------------------------------------------------
Toda persona tiene derecho a cometer errores...
la verdad es q solo ella es RESPONSABLE DE LO QUE HACE.....!!!!!

joseprox

Aqui les paso la clase cliente...........esta es muy facil........no tiene pierde...



____________________________________________

/***********************************************************************
                          cliente.java
************************************************************************
aplicacion cliente del chat simple desarrollado en java.
compilar con :
                javac cliente.java
ejecutar con :
                java cliente [direccion ip o nombre del equipo servidor]
***********************************************************************/

// Librerias Necesarias
import java.awt.*;     // modo grafico
import java.io.*;      // entrada/salida
import java.net.*;     // funciones de red

public class cliente extends Frame {

// elementos de la ventana
static Button enviar = new Button("Enviar");
static Button cerrar = new Button("Cerrar");
static TextArea texto = new TextArea(10,40);
static TextField mensaje = new TextField(40);

// Componentes de la comunicacion
static Socket  servidor;             // socket servidor
static InetAddress direccion;        // direccion del servidor
static String mensa = "";
static PrintStream ps;               // flujo de salida
static DataInputStream datos;        // flujo de entrada

// funcion principal
public static void main( String args[]) {

     //crear instancia ventana
     new cliente();
     
     //crear socket cliente relacionado con el servidor
     try{
        direccion = getdir(args);               // llamada a getdirs()
        servidor = new Socket(direccion, 5000); // creacion del socket servidor
        activar();

        // inicializar el flujo de salida con los datos del servidor
        ps = new PrintStream(servidor.getOutputStream());
        // inicializar el flujo de entrada
        datos = new DataInputStream(servidor.getInputStream());

        texto.append("Conectado con el servidor ...\n");

        // ciclo de recepcion de mensajes
        while((mensa = datos.readLine()) != null){
           texto.append("Servidor dice : "+mensa+"\n");
        };

       texto.append("Desconectado del servidor ...\n");
       cerrarconexion();
       desactivar();

     }catch (IOException e) {  // en caso de error de entrada/salida
        System.out.println("Error al conectar con el servidor");
        System.exit(1);
     };
  }

// funcion que grafica
public cliente() {

     // titulo de la ventana
     setTitle("Java Chat Cliente");

     // elementos de la ventana
     Panel pan = new Panel();
     pan.add(enviar);
     pan.add(cerrar);

     Panel pan1 = new Panel();
     pan1.add(mensaje);

     Panel pan2 = new Panel();
     pan2.add(texto);

     add("North",pan2);
     add("Center",pan1);
     add("South",pan);

     enviar.disable();
     texto.disable();
     mensaje.disable();

     // tama¤o constante
     setResizable(false);

     // organizar y mostrar
     pack();
     show();
  }
public boolean action(Event ev, Object arg) {
 
   // eventos en los botones

   // click en el boton cerrar
   if((ev.target == cerrar)&&(ev.id == 1001)){
       cerrarconexion();
       System.exit(0);
    }

   // click en el boton enviar
   if((ev.target == enviar)&&(ev.id == 1001)){
      if(!mensaje.getText().equals("")){
         ps.println(mensaje.getText()); // enviar el contenido de texto
         texto.append("Cliente dice : "+mensaje.getText()+"\n");
         mensaje.setText("");
       }
    }
   return(true);
}

// esta funcion habilita los elementos de la ventana
public static void activar(){
     enviar.enable();
     mensaje.enable();
  }

// esta funcion deshabilita los elementos de la ventana
public static void desactivar(){
     enviar.disable();
     mensaje.disable();
  }

// funcion que convierte la direccion ip o el nombre del equipo donde esta
// corriendo el socket servidor que se pasa como parametro al programa
public static InetAddress getdir(String ar[]){
     InetAddress tem = null;
     try{
     // si no hay argumentos tomar localhost
     if(ar.length == 0){
       tem = InetAddress.getLocalHost();
      }
     // si hay convertirla de string a inetaddress
     if(ar.length == 1){
       tem = InetAddress.getByName(ar[0]);
      }
     // error en la direccion
     }catch(UnknownHostException e){
       texto.append("Error en la direccion.");
      }
     return(tem);
  }

// funcion que cierra la conexion con el servidor
public static void cerrarconexion(){
     try{
         servidor.close();
     }catch(IOException e){
         texto.append("Error al cerrar el cliente");
     };
     desactivar();
}
}


____________________________________________

Toda persona tiene derecho a cometer errores...
la verdad es q solo ella es RESPONSABLE DE LO QUE HACE.....!!!!!

genco

Cita de: juancho77 en  4 Octubre 2008, 10:04 AM
Estoy haciendo un programa que implementa las clases Socket y ServerSocket de Java.net.
En la parte del cliente tengo una sección del programa para ingresar usuario y password y conectarse al servidor. El socket se conecta, hace el chequeo contra una tabla y permite el ingreso o no. Luego de esto (que lo hace bien) necesito que el socket siga conectado para seguir intercambiando informacion con el servidor.
Mi pregunta es como puedo hacer para crear una sola instancia del socket en la clase del cliente, y que de esa forma se quede conectada esa instancia mientras este abierta la aplicacion?

Si no se me entendio nada, pero alguien sabe de sockets, me gustaria intercambiar algunas ideas por msn o mail.
MSN = juanvillegas_77@hotm...com
Mail = juanvillegas@bvconline.com.ar


pues usa el patron singleton, se usa para crear una solo instancia de una clase y generalmente lo usan para administrar las conexiones y otras cositas.

el servidor debe estar siempre escuchando y solo cerrar la conexion cuando el usuario y el password no es correcto,

en el cliente tambien debes permitir el cierre de la conexion por parte del usuario, practicamente es un chat lo que estas haciendo.