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
Código:
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).
Código:
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.