Duda con con codigo chat ayuda!!!

Iniciado por shin_akuma, 26 Marzo 2008, 19:38 PM

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

shin_akuma

haber aqui va de nuevo moderadores

Mi problema es con Java ya que estoy intentando hacer un programa donde haya una comunicacion entre un cliente y un servidor (un chat) el problema es que ya revise mi codigo de arriba para ver si habia algun error e consultado con maestros y en otros foros y en teorial en el codigo fuente no deberia haber ningun erro vien este es el problema

tengo dos programas un que es el cliente en este no hay ningun problema pero lo pondre para mayor referencia

codigo de el cliente

import java.io.PrintStream;
import java.net.*;
import java.awt.*;
import javax.swing.*;
import java.awt.*;
import java.io.*;
import java.awt.event.*;

public class ClienteGraficoChat extends JFrame
{
    private static final int PUERTO=9000;
    protected Socket socketCliente;
    private Sesion sesion;
    protected PrintStream salida;
    protected BufferedReader entrada;
   
    private JPanel contentPane;
    private JTextField txtMensaje=new JTextField ();
    protected JTextArea txtArea=new JTextArea ();
    private JButton btnCerrar=new JButton ();
    private JScrollPane scrollPane = new JScrollPane ();
    private JLabel lblTexto = new JLabel ();
   
    public ClienteGraficoChat ()
    {
        enableEvents(AWTEvent.WINDOW_EVENT_MASK);
        iniciar();
        try
        {
            socketCliente = new Socket ("Local Host",PUERTO);
            salida = new PrintStream(socketCliente.getOutputStream());
            entrada = new BufferedReader (new InputStreamReader(socketCliente.getInputStream()));
            sesion = new Sesion(this);
            System.out.println("Arrancando cliente");           
        }
        catch (IOException e2)
        {
            if (socketCliente != null)
            {
                try
                {
                    socketCliente.close();
                }
                catch (IOException e3)
                {
                }
               
               
            }
            errorFatal(e2,"Fallo Al Intentar Conectar Con el servidor");
        }       
    }
     
    public static void main (String []args) throws IOException, ConnectException
     {
        try
        {
            System.out.println("Arrancando CLiente");
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            ClienteGraficoChat f=new ClienteGraficoChat ();
       
            Dimension ScreenSize = Toolkit.getDefaultToolkit().getScreenSize();
            Dimension frameSize = f.getSize();
       
            if (frameSize.height > ScreenSize.height)
            {
                frameSize.height =ScreenSize.height;           
            }
            if (frameSize.width > ScreenSize.width)
            {
                frameSize.width = ScreenSize.width;
            }
            f.setLocation((ScreenSize.height - frameSize.height)/2, (ScreenSize.width - frameSize.width)/2);
            f.show();
        }
        catch (Exception e)
        {
            e.printStackTrace();
            errorFatal(e,"Error al Gestionar la apariencioa y el estilo");
        }
       
     }
    private void iniciar ()
        {
            contentPane = (JPanel)this.getContentPane();
            txtMensaje.setBounds(new Rectangle(117,49,256,29));
            txtMensaje.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(ActionEvent e)
                {
                    txtMensaje_actionPerformed(e);
                }
            });
            contentPane.setLayout(null);
            this.setSize(new Dimension (400,400));
            this.setTitle("Chat");
            btnCerrar.setText("CERRAR");
            btnCerrar.setBounds(new Rectangle(150, 323, 76 ,29));
            btnCerrar.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(ActionEvent e)
                {
                    btnCerrar_actionPerformed(e);
                }
            });
            scrollPane.setBounds(new Rectangle(9,106,370,205));
            lblTexto.setBackground(Color.red);
            lblTexto.setFont(new java.awt.Font("Dialogo",1,12));
            lblTexto.setText("Escriba el texto");
            lblTexto.setBounds(new Rectangle(17, 49, 87, 32));
            contentPane.add(txtMensaje, null);
            contentPane.add(btnCerrar, null);
            contentPane.add(lblTexto, null);
            contentPane.add(scrollPane, null);
            scrollPane.getViewport().add(txtArea, null);
      }   
     
    protected void processWindowEvent(WindowEvent e)
    {
        super.processWindowEvent(e);
        if (e.getID() == WindowEvent.WINDOW_CLOSING)
        {
            salida.println("Desconectar");
        }
    }
    void txtMensaje_actionPerformed(ActionEvent e)
    {
        salida.println(txtMensaje.getText());
        txtMensaje.setText("");
    }
    void btnCerrar_actionPerformed(ActionEvent e)
    {
        salida.println("Desconectar");
    }
    private static void errorFatal(Exception exception,String mensajeError)
    {
        exception.printStackTrace();
        JOptionPane.showMessageDialog(null,"Error Fatal"+System.getProperty("line.separator")+mensajeError, "Informacion para el usuario",JOptionPane.WARNING_MESSAGE);
        System.exit(-1);
    }
    class Sesion extends Thread
    {
        private ClienteGraficoChat clienteChat;
        public Sesion(ClienteGraficoChat clienteChat) throws IOException
        {
            this.clienteChat = clienteChat;
            start();
        }
       
        public void run()
        {
            String fin1="Adios";
            String fin2="Hasta la vista";
            String linea = null;
            try
            {
                while ((linea=clienteChat.entrada.readLine())!=null)
                {
                    clienteChat.txtArea.setText(clienteChat.txtArea.getText()+linea+System.getProperty("linea Separador"));
                    if (linea.equals(fin1)|| linea.equals(fin2))
                    {
                        try
                        {
                            this.sleep(5000);
                        }
                        catch (java.lang.InterruptedException e1)
                        {
                           
                        }
                        break;
                    }
                }                   
            }
        catch (IOException e2)
        {
            e2.printStackTrace();
        }
            finally
            {
                try
                {
                    clienteChat.dispose();
                    clienteChat.entrada.close();
                    clienteChat.salida.close();
                    clienteChat.socketCliente.close();
                }
           
                catch (IOException e3){}
                System.exit(-1);
            }
            }
        }

    }


Bien el problema esta en el servidor ya que el la linea 108 hay un error de compilacion el cual me dice (no se encuentra identificado).



import java.io.*;
import java.net.*;
import javax.swing.*;
import java.util.*;

public class ServidorChat
{
    private static final int PUERTO=9000;
    protected static final int TIEMPO_DE_DESCONEXION_AUTOMATICA=600000;
    private ServerSocket socketServidor;   
   
    public static void main (String []args)
    {
        new ServidorChat();       
    }
   
    public ServidorChat()
    {
        System.out.println("Arrancando Servidor por el puerto "+PUERTO);
        arrancarServidor();
        procesarClientes();       
    }
   
    private void arrancarServidor()
    {
        try
        {
            socketServidor = new ServerSocket(PUERTO);
            System.out.println("El servidor esta en marcha escuchando por el puerto: "+PUERTO);
        }
        catch (java.net.BindException e1)
        {
            String mensaje="No se puede arrancar el servido es posible que el puerto "+PUERTO+" este ocupado";
            errorFatal(e1,mansaje);
        }
        catch (java.lang.SecurityException e2)
        {
            String mansaje="No se puede arrancar el servidor es posible que el puerto "+PUERTO+" Tenga restricciones de seguridad";
            errorFatal(e2,mensaje);
        }
        catch (IOException e3)               
        {
            String mansaje="IMposible arrancar el servidor";
            errorFatal(e3,mensaje);
        }
    }
    private void procesarClientes()
    {
        Socket socketCliente =null;
        while (true)
        {
            try
            {
                socketCliente = socketServidor.accept();
                try
                {
                    new ThreadServidor(socketCliente);
                }
                catch (IOException e1)
                {
                    if (socketCliente !=null)
                    {
                        try
                        {
                            socketCliente.close();
                        }
                        catch (IOException e2)
                        {
                           
                        }
                    }
                }
            }
            catch (java.lang.SecurityException e3)
            {
                if (socketServidor !=null)
                {
                    try
                    {
                        socketServidor.close();
                    }
                    catch (IOException e4)
                    {
                        //nothing
                    }
                }
                String mensaje="Con su configuracion de seguridad, Los clientes no podran conectarse por el puerto "+PUERTO;
                errorFatal(e3,mensaje);               
            }
            catch (IOException e5)
            {
                //no se hace nada por que no se pudo crear el socket
            }
        }
    }
    public static void errorFatal(Exception excepcion, String mensajeError)
    {
        excepcion.printStackTrace();
        JOptionPane.showMessageDialog(null,"Error Fatal."+System.getProperty("line.separator")+mensajeError,"Informacion Para el usuario",JOptionPane.WARNING_MESSAGE);
        System.exit(-1);
    }
}

class ThreadServidor extends Thread
{
    private String nombreCliente;
    private static String historial = "C:historial.txt";
    private static clientesActivos = new ArryList();
    private Socket socket;
    private BufferedReader entrada;
    private PrintWriter salida;
   
    public ThreadServidor(Socket socket) throws IOException
    {
        this.socket = socket;
        PrintWriter salidaArchivo=null;
        salida=new PrintWriter(socket.getOutputStream(),true);
        entrada = new BufferedReader (new InputStreamReader(socket.getInputStream()));
        escribirHistorial("conexion desde la direccion");
        start();       
    }
   
    public void run()
    {
        String textoUsuario="";
        try
        {
            salida.println("> Bienvenido a este chat.");
            salida.println(">introduce tu nombre");
            nombreCliente = (entrada.readLine()).trim();
            if ((nombreCliente.equals(""))||(nombreCliente==null))
            {
                nombreCliente="invitado";
            }
            Iterator it= clientesActivos.iterator();
            while (it.hasNext())
            {
                if (nombreCliente.equals(((ThreadServidor)it.next()).nombreCliente))
                {
                    nombreCliente = nombreCliente + socket.getPort();
                    break;
                }
            }
            anyadirConexion(this);
            salida.println(">Se le asigno el alias de"+nombreCliente);
            socket.setSoTimeout(ServidorChat.TIEMPO_DESCONEXION_AUTOMATICA);
            while ((textoUsuario=entrada.readLine())!=null)
            {
                if ((textoUsuario=entrada.equals("DESCONECTAR")))
                {
                    salida.println("****************adios************");
                    break;
                }
                else if ((textoUsuario.equals("LISTAR")))
                {
                    escribirCliente (this,">"+clientesActivos());
                }
                else
                {
                    escribirATODOS(nombreCliente+">"+textoUsuario);
                }
            }
        }
        catch (java.io.InterruptedIOException e1)
        {
            escribirCliente(this,">"+"Se paso el tiempo:Conexion Cerrada");
            escribirCliente(this,">"+"Si desea continuar, abra otra sesion");
            escribirHistorial("desconexion Involuntaria por fin de tiempo desde la direccion:");
        }
        catch (IOException e2)
        {
            escribirHistorial("desconexion Involuntaria desde la direccion:");
        }
        finally
        {
            eliminarConexion(this);
            limpiar();
        }
    }
    private void limpiar ()
    {
        if (entrada !=null)
        {
            try
            {
                entrada.close();
            }
            catch(IOException e1)
            {
               
            }       
        }
        if (salida!=null)
        {
            salida.close();
            salida=null;
        }
        if (socket !=null)
        {
            try
            {
                socket.close();
            }
            catch (IOException e2)
            {
               
            }
            socket=null;
        }       
    }
   
    private static synchronized void eliminarConexion(ThreadServidor threadServidor)
    {
        clientesActivos.remove(threadServidor);
    }
   
    private static synchronized void anyadirConexion(ThreadServidor threadServidor)
    {
        clientesActivos.add(threadServidor);
    }
   
    private synchronized void escribirATODOS(string textoUsuario)
    {
        Iterator it=clientesActivos.iterator();
        while (it.hasNext())
        {
            ThreadServidor tmp=(ThreadServidor) it.next();
            if (!(tmp.equals(this)))
           
                escribirCliente(tmp.textoUsuario);
           
        }
       
    }
   
    private synchronized void escribirCliente(ThreadServidor threadServidor,String textoUsuario)
    {
        (threadServidor.salida).println(textoUsuario);
    }
   
    private static synchronized StringBuffer clientesActivos()
    {
        StringBuffer cadena = new StringBuffer();
        for (int i=o;i<clientesActivos.size();i++)
        {
            ThreadServidor tmp = (ThreadServidor) (clientesActivos.get(i));
            cadena.append((((ThreadServidor) clientesActivos.get(i)).nombreCliente)).append("||");
        }
        return cadena;
    }
   
    private synchronized void escribirHistorial(String mensaje)
    {
        PrintWriter salidaArchivo=null;
        try
        {
            salidaArchivo = new PrintWriter(new BufferedWriter(new FileWriter(historial,true)));
            salidaArchivo.println(mensaje+""+socket.getInetAddress().getHostName()+" Por el puerto "+socket.getPort()+" en la fecha "+new Date());
        }
        catch(IOException e1)
        {
            System.out.prinln("Fallo en el archivo historial.");
        }
        finally
        {
            if (salidaArchivo !=null)
            {
                salidaArchivo.close();
                salidaArchivo=null;
            }
        }
    }
}




bueno lo que no e podido descifrar es por que  no la encuentra puesto que se declara un arreglo para reunir todos los clientes conectados al servidor y regresa cadena como resultado entonces no se por que el compilador me dice que no encuentra el identificador

posdata:

Espero deverdad que alguien pueda ayudamer deverdad se los agradecería mucho

posdata2:

Porfavor moderadores ya revise el reglamento y en ningun momento vi que faltara a ninguna regla esepto el de no poner mi codigo en las etiquetas y que por eso borraran el tema, por favor mi unico deseo es aprender y ser parte de foro por lo tanto espero que respeten mi duda y no borren el tema por su atencion gracias.
El conocimiento es poder!!!

Saludos!!



Casidiablo

Exacto... fue por no poner las etiquetas de code que te borre el post... con respecto al problema, debería ser así la línea 108:

private static ArrayList clientesActivos = new ArrayList();

O algo por el estilo... además tienes un montón de errores más. Por ejemplo, intentas hacer "string variable" y es "String variable".

Un saludo!

Casidiablo

Después de corregir 12 errores:

Código (java) [Seleccionar]
import java.io.*;
import java.net.*;
import javax.swing.*;
import java.util.*;

public class ServidorChat
{
    private static final int PUERTO=9000;
    protected static final int TIEMPO_DESCONEXION_AUTOMATICA=600000;
    private ServerSocket socketServidor;   
   
    public static void main (String []args)
    {
        new ServidorChat();       
    }
   
    public ServidorChat()
    {
        System.out.println("Arrancando Servidor por el puerto "+PUERTO);
        arrancarServidor();
        procesarClientes();       
    }
   
    private void arrancarServidor()
    {
        try
        {
            socketServidor = new ServerSocket(PUERTO);
            System.out.println("El servidor esta en marcha escuchando por el puerto: "+PUERTO);
        }
        catch (java.net.BindException e1)
        {
            String mensaje="No se puede arrancar el servido es posible que el puerto "+PUERTO+" este ocupado";
            errorFatal(e1, mensaje);
        }
        catch (java.lang.SecurityException e2)
        {
            String mensaje="No se puede arrancar el servidor es posible que el puerto "+PUERTO+" Tenga restricciones de seguridad";
            errorFatal(e2, mensaje);
        }
        catch (IOException e3)               
        {
            String mensaje="IMposible arrancar el servidor";
            errorFatal(e3, mensaje);
        }
    }
    private void procesarClientes()
    {
        Socket socketCliente =null;
        while (true)
        {
            try
            {
                socketCliente = socketServidor.accept();
                try
                {
                    new ThreadServidor(socketCliente);
                }
                catch (IOException e1)
                {
                    if (socketCliente !=null)
                    {
                        try
                        {
                            socketCliente.close();
                        }
                        catch (IOException e2)
                        {
                           
                        }
                    }
                }
            }
            catch (java.lang.SecurityException e3)
            {
                if (socketServidor !=null)
                {
                    try
                    {
                        socketServidor.close();
                    }
                    catch (IOException e4)
                    {
                        //nothing
                    }
                }
                String mensaje="Con su configuracion de seguridad, Los clientes no podran conectarse por el puerto "+PUERTO;
                errorFatal(e3, mensaje);               
            }
            catch (IOException e5)
            {
                //no se hace nada por que no se pudo crear el socket
            }
        }
    }
    public static void errorFatal(Exception excepcion, String mensajeError)
    {
        excepcion.printStackTrace();
        JOptionPane.showMessageDialog(null,"Error Fatal."+System.getProperty("line.separator")+mensajeError,"Informacion Para el usuario",JOptionPane.WARNING_MESSAGE);
        System.exit(-1);
    }
}

class ThreadServidor extends Thread
{
    private String nombreCliente;
    private static String historial = "C:historial.txt";
    private static ArrayList clientesActivos = new ArrayList();
    private Socket socket;
    private BufferedReader entrada;
    private PrintWriter salida;
   
    public ThreadServidor(Socket socket) throws IOException
    {
        this.socket = socket;
        PrintWriter salidaArchivo=null;
        salida=new PrintWriter(socket.getOutputStream(),true);
        entrada = new BufferedReader (new InputStreamReader(socket.getInputStream()));
        escribirHistorial("conexion desde la direccion");
        start();       
    }
   
    public void run()
    {
        String textoUsuario="";
        try
        {
            salida.println("> Bienvenido a este chat.");
            salida.println(">introduce tu nombre");
            nombreCliente = (entrada.readLine()).trim();
            if ((nombreCliente.equals(""))||(nombreCliente==null))
            {
                nombreCliente="invitado";
            }
            Iterator it= clientesActivos.iterator();
            while (it.hasNext())
            {
                if (nombreCliente.equals(((ThreadServidor)it.next()).nombreCliente))
                {
                    nombreCliente = nombreCliente + socket.getPort();
                    break;
                }
            }
            anyadirConexion(this);
            salida.println(">Se le asigno el alias de"+nombreCliente);
            socket.setSoTimeout(ServidorChat.TIEMPO_DESCONEXION_AUTOMATICA);
            while ((textoUsuario=entrada.readLine())!=null)
            {
                if (textoUsuario=="DESCONECTAR")
                {
                    salida.println("****************adios************");
                    break;
                }
                else if ((textoUsuario.equals("LISTAR")))
                {
                    escribirCliente (this,">"+clientesActivos());
                }
                else
                {
                    escribirATODOS(nombreCliente+">"+textoUsuario);
                }
            }
        }
        catch (java.io.InterruptedIOException e1)
        {
            escribirCliente(this,">"+"Se paso el tiempo:Conexion Cerrada");
            escribirCliente(this,">"+"Si desea continuar, abra otra sesion");
            escribirHistorial("desconexion Involuntaria por fin de tiempo desde la direccion:");
        }
        catch (IOException e2)
        {
            escribirHistorial("desconexion Involuntaria desde la direccion:");
        }
        finally
        {
            eliminarConexion(this);
            limpiar();
        }
    }
    private void limpiar ()
    {
        if (entrada !=null)
        {
            try
            {
                entrada.close();
            }
            catch(IOException e1)
            {
               
            }       
        }
        if (salida!=null)
        {
            salida.close();
            salida=null;
        }
        if (socket !=null)
        {
            try
            {
                socket.close();
            }
            catch (IOException e2)
            {
               
            }
            socket=null;
        }       
    }
   
    private static synchronized void eliminarConexion(ThreadServidor threadServidor)
    {
        clientesActivos.remove(threadServidor);
    }
   
    private static synchronized void anyadirConexion(ThreadServidor threadServidor)
    {
        clientesActivos.add(threadServidor);
    }
   
    private synchronized void escribirATODOS(String textoUsuario)
    {
        Iterator it=clientesActivos.iterator();
        while (it.hasNext())
        {
            ThreadServidor tmp=(ThreadServidor) it.next();
            if (!(tmp.equals(this)))
           
                escribirCliente(tmp, textoUsuario);
           
        }
       
    }
   
    private synchronized void escribirCliente(ThreadServidor threadServidor,String textoUsuario)
    {
        (threadServidor.salida).println(textoUsuario);
    }
   
    private static synchronized StringBuffer clientesActivos()
    {
        StringBuffer cadena = new StringBuffer();
        for (int i=0;i<clientesActivos.size();i++)
        {
            ThreadServidor tmp = (ThreadServidor) (clientesActivos.get(i));
            cadena.append((((ThreadServidor) clientesActivos.get(i)).nombreCliente)).append("||");
        }
        return cadena;
    }
   
    private synchronized void escribirHistorial(String mensaje)
    {
        PrintWriter salidaArchivo=null;
        try
        {
            salidaArchivo = new PrintWriter(new BufferedWriter(new FileWriter(historial,true)));
            salidaArchivo.println(mensaje+""+socket.getInetAddress().getHostName()+" Por el puerto "+socket.getPort()+" en la fecha "+new Date());
        }
        catch(IOException e1)
        {
            System.out.println("Fallo en el archivo historial.");
        }
        finally
        {
            if (salidaArchivo !=null)
            {
                salidaArchivo.close();
                salidaArchivo=null;
            }
        }
    }
}


La próxima busca mejor los errores :P

Un saludo!

Burnhack

Jejeje, CasiDiablo...sigues siendo The Best...no lo compilara ni nada pero solo se me ocurria decirle los fallos del "string" . No es nada facil coger codes ajenos y entenderlos.


Saludos



Cuentas Premium Gratis aquí

Petición partidos fútbol, F1, tenis, baloncesto...
aquí

Casidiablo

Cita de: Burnhack en 26 Marzo 2008, 20:04 PMNo es nada facil coger codes ajenos y entenderlos.

Es lo que iba yo a decir...

shin_akuma

Oky gracias por la ayuda me sirvio mucho

Tratare de no tener tantos errores :xD  de dedo pero ese error no me dejeba ver la los otros ya que uso el net beans de nuevo gracias  ;D
El conocimiento es poder!!!

Saludos!!



Burnhack

Cita de: shin_akuma en 26 Marzo 2008, 21:07 PM
Oky gracias por la ayuda me sirvio mucho

Tratare de no tener tantos errores :xD  de dedo pero ese error no me dejeba ver la los otros ya que uso el net beans de nuevo gracias  ;D

Deberias de trabajar con eclipse, yo creo que es mejor para aprender y trabajar java.Aunque este no es el debate.

Saludos



Cuentas Premium Gratis aquí

Petición partidos fútbol, F1, tenis, baloncesto...
aquí