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

Mulples clietes en servidor de java

Estas en el tema de Mulples clietes en servidor de java en el foro de Java en Foros del Web. Hola me encuentro usando sockets y serversockets, ahora quiero un servidor que acepte multples clientes...lo que hice fue lo siguiente, utilice un hilo por cada ...
  #1 (permalink)  
Antiguo 11/07/2011, 14:11
 
Fecha de Ingreso: junio-2010
Mensajes: 132
Antigüedad: 13 años, 10 meses
Puntos: 3
Mulples clietes en servidor de java

Hola me encuentro usando sockets y serversockets, ahora quiero un servidor que acepte multples clientes...lo que hice fue lo siguiente, utilice un hilo por cada cliente que se conecta a mi servidor, pero estos hilos no logran funcionar, aki les dejo la clase hilocliente y el cliente como tal, presentan problemas de retardo, por favor necesito ayuda urgentemenete

Código:
package agenteinteligente;

/**
 *
 * @author Jose
 */


import java.awt.event.*;
import java.net.*;
import java.io.*;

public class Cliente_Agente extends javax.swing.JFrame implements KeyListener,Runnable{

    /** Creates new form Cliente_Agente */

    private ObjectOutputStream salida;
    private ObjectInputStream entrada;
    private Socket cliente;
    private int salidaInt;
    private String mensaje,direccionServer;
    private boolean conectado;
    private Thread t;

    public Cliente_Agente(String Direccion) {
        initComponents();
        this.addKeyListener(this);

        salidaInt = 0;
        mensaje = "";
        direccionServer = Direccion;
        conectado = false;
        t = new Thread(this);
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 400, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 300, Short.MAX_VALUE)
        );

        pack();
    }// </editor-fold>                        

    public void run()
    {
        conectarAServidor(direccionServer);
        obtenerFlujos();
        while(true)
        {
            System.out.println("Paso");
            this.enviarDatos(salidaInt);
            try{Thread.sleep(2000);}catch(Exception e){}
        }
    }

    public void ejecutarCliente()
    {
        try{
            //conectarAServidor(direccionServer);
            //obtenerFlujos();
            //procesarConexion();
            conectado = true;
            t.start();


        }catch(Exception e){}
    }
    
    private void conectarAServidor(String direccion)
    {
        try{
            cliente = new Socket(direccion,12345);
        
        }catch(Exception e){}

        System.out.println("Agente Conectado");
        
    }
    
    private void obtenerFlujos()
    {
        //System.out.println("Se recibieron los flujos");
        try{
        this.salida = new ObjectOutputStream(cliente.getOutputStream());
        this.salida.flush();
        this.entrada = new ObjectInputStream(cliente.getInputStream());
        System.out.println("Se recibieron los flujos");
        
        }
        catch(IOException e)
        {
            System.out.println("Exception en Obtener flujos");
        }  
    }
    
    private void procesarConexion()
    {
        do{
            
            try{

                salidaInt =  entrada.readInt();
            }
            //catch(ClassNotFoundException e){System.out.println("ProcesarConexion");}
            catch(IOException e){System.out.println("ProcesarConexion");}
   
        }while(conectado);
    }

    private void enviarDatos(int movimiento)
    {
        if(true)
        try{

            salida.writeInt(movimiento);
            salida.flush();
            System.out.println(movimiento + " enviado");

        }
        catch(Exception e){System.out.println("Excepcion en la funcion enviarDatos");}

        else
            System.out.println("No hay conexion");
    }

   private void closeConnection()
   {
      System.out.println("Cerrando Conexion");

      try {
         salida.close();
         entrada.close();
         cliente.close();
      }
      catch( IOException ioException ) {
         ioException.printStackTrace();
      }

      System.out.println("\nConexion Cerrada");
   }

    public void keyPressed(KeyEvent ke)
    {
        int key = ke.getKeyCode();

        switch(key)
        {
            case KeyEvent.VK_LEFT:
                enviarDatos(4);
                System.out.println("Izquierda");
                salidaInt = 4;
                break;
            case KeyEvent.VK_RIGHT:
                enviarDatos(6);
                System.out.println("derecha");
                salidaInt = 6;
                break;
            case KeyEvent.VK_UP:
                enviarDatos(8);
                System.out.println("arriba");
                salidaInt = 8;
                break;

            case KeyEvent.VK_DOWN:
                enviarDatos(2);
                System.out.println("abajo");
                salidaInt = 2;
                break;

            case KeyEvent.VK_ESCAPE:
                System.out.println("Chao!!");
                closeConnection();
                conectado = false;
        }
    }

    public void keyReleased(KeyEvent ke) {}
    public void keyTyped(KeyEvent ke){}
    

    /**
    * @param args the command line arguments
    */
    /*public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Cliente_Agente().setVisible(true);
            }
        });
    }*/

    // Variables declaration - do not modify                     
    // End of variables declaration                   

}
su respectivo main

Código:
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here

        Cliente_Agente cliente;
        //cliente = new Cliente_Agente();

         if ( args.length == 0 )
         cliente = new Cliente_Agente( "127.0.0.1");
       else
         cliente = new Cliente_Agente( args[ 0 ] );


        cliente.setVisible(true);
        cliente.ejecutarCliente();
    }

}

gracias de antemano
  #2 (permalink)  
Antiguo 11/07/2011, 14:11
 
Fecha de Ingreso: junio-2010
Mensajes: 132
Antigüedad: 13 años, 10 meses
Puntos: 3
Respuesta: Mulples clietes en servidor de java

Hay otras partes pero la pagina no me deja ponerlos
  #3 (permalink)  
Antiguo 11/07/2011, 18:36
 
Fecha de Ingreso: febrero-2010
Mensajes: 39
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Mulples clietes en servidor de java

Hola, disculpame que no me detube mucho a leer tu codigo, tambien estoy buscando unas cuestiones para mañana. Pero en algun momento hice algo de sockets con threads, espero te sirva...(quizas hay mas cosas de las q necesites o quizas te de una idea para ampliar tu pryecto)

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.URL;


class GestorPeticion implements Runnable
{
static Logger logger = Logger.getLogger(GestorPeticion.class);
Thread t;
BufferedReader entradas =null;
FileInputStream entrada = null;
//PrintWriter salida = null;
Socket s;
String archivo = null;
String info = null;
Ubicador ubicador = new Ubicador();

/**
* Método que abre socket para almecenar los datos enviados por el cliente y se le envia la ruta del archivo
* recibido al desglozador
* @param Socket coneccion entrante
*/
public GestorPeticion(Socket s)
{
t = new Thread(this);
t.start();
this.s = s;
}

@Override
public void run()
{
URL url = GestorPeticion.class.getResource("Info.properties" );
PropertyConfigurator.configure(url);
try
{
Desglozador desglozador = new Desglozador();
//BUFER PARA DESCARGAR LO QUE EL CLIENTE NOS ESTÁ ENVIANDO
//recibo el nombre del archivo
entradas = new BufferedReader(new InputStreamReader(s.getInputStream()));
String nombArchivo = entradas.readLine();
System.out.println("Archivo Recibido: " + nombArchivo+" de "+s);

//recibo archivo
archivo = nombArchivo;
InputStream in = s.getInputStream();

//info en log
logger.info("Abriendo archivo: " + nombArchivo +" de " + s);

//depende el prefijo del archivo, le otorgo la ubicacion correspondiente
String direccion = ubicador.ruta(nombArchivo);

//crear archivo en disco
try
{
String auditado = direccion+"audit-"+nombArchivo;
FileOutputStream out = new FileOutputStream(new File(auditado));

byte[] buf = new byte[1024]; // bufer de 1k
int len = 0;
int tlen = 0;
// System.out.println(in.toString());
while ((len = in.read(buf)) > 0)
{
out.write(buf, 0, len);
tlen = tlen + len;
}
out.close();

//hacer checksum "jacsum"
System.out.println("Archivo recibido: "+auditado);
logger.info(tlen+ " bytes almacenados en " + auditado+" de "+s);
System.out.println(tlen+ " bytes almacenados en " + auditado+" de "+s);
in.close();

desglozador.desglozar(auditado);//desgloza el archivo entrante para almacenar en la BD

}
//excepcion por inexistencia del directorio de almacenaje
catch(Exception e)
{
//System.out.println(e);
logger.info(e);
in.close();
}
}//fin try
catch (Exception e)
{
e.printStackTrace();
}
}// fin run
  #4 (permalink)  
Antiguo 11/07/2011, 18:52
 
Fecha de Ingreso: junio-2010
Mensajes: 132
Antigüedad: 13 años, 10 meses
Puntos: 3
Respuesta: Mulples clietes en servidor de java

Jajaajaja gracias pero yo ya hice eso hace como 1 hora amigo, era un problema que tenia al obtener los flujos del socket en el programa del cliente, elp orblema era que en el server los flujos que se obtenian eran los DataInputStream y los DataOutputStream, y en el cliente los Flujos que se obtenian eran objectOutputStream y objectInputStream, osea por eso no funcionaba, pero ahora ya funcionan y me doy cuenta que estaba ahogado en un baso de agua, gracias de todoas maneras, mas ahora, posteo mi codigo para que la gente puede despejar sus dudas, ademas tengo pensado hacer un tutorial en youtube, para tener ese respaldo por siempre... Saludos

Etiquetas: jframe, servidor, socket
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 22:28.