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

Problemas con chat

Estas en el tema de Problemas con chat en el foro de Java en Foros del Web. Tengo el programa Servidor y el Cliente ambos armados desde cero por mi. Les comento que cuando se ejecutan, en maquinas aparte los dos ocupan ...
  #1 (permalink)  
Antiguo 22/02/2005, 12:02
 
Fecha de Ingreso: octubre-2004
Mensajes: 10
Antigüedad: 19 años, 6 meses
Puntos: 0
Problemas con chat

Tengo el programa Servidor y el Cliente ambos armados desde cero por mi.
Les comento que cuando se ejecutan, en maquinas aparte los dos ocupan todos los recursos. Les dejo el codigo fuente de el cliente.

Este seria el principal...
Código:
import java.awt.*;

public class Login extends Frame {
    TextField nick,email;
    int donde;
	Choice Selector;
    public Login() {

        donde=1;

        resize(250,130);
        //ComboBox	
		Selector = new Choice();
		Selector.addItem("Sala 1");
		Selector.addItem("Sala 2");
	//______________________________________

        Panel p1=new Panel();
        Panel p11=new Panel();
        p11.setLayout(new GridLayout(3,1));
        Panel p12=new Panel();
        p12.setLayout(new GridLayout(3,1));

        nombre=new TextField(15);
        nick=new TextField(15);
        email=new TextField(15);
        p11.add(new Label("Nick:"));
        p12.add(nick);
        p11.add(new Label("Email:"));
        p12.add(email);
        p11.add(new Label("Elije una sala:"));
        p12.add(Selector);
        p1.add("West",p11);
        p1.add("East",p12);
        add("North",p1);
        
        Panel p2=new Panel();
        Button b=new Button("Conectar");
        p2.add(b);
        add("South",p2);
	  setResizable(false);

    } 

    public boolean handleEvent( Event evt ) 
    {
        if (evt.id==evt.WINDOW_EXPOSE)
        {
     	  	switch(donde)
     		{
  			case 1:nick.requestFocus();break;
			case 2:email.requestFocus();break;

		}
		return true;
        }
	  if (evt.id==evt.KEY_PRESS)
        {
		  if (evt.key==9)
	        {
      	  	switch(donde)
	     		{
  			case 1:nick.requestFocus();donde=2;break;
			case 2:email.requestFocus();donde=3;break;

			}
			return true;
	        }
        }
        if( evt.target instanceof Button )
        {
            String boton = ( (Button)evt.target).getLabel();
            if( boton.equals( "Conectar" ) )
            {
			hide();
                  Chat c=new Chat(nick.getText(),email.getText());
            }           
            return( true );
        }
        return false;
    } 


    public static void main( String args[] ) 
    {
        Login window = new Login();
        window.setTitle("Login a OlimarChat");
        window.show();
    }
}

Código:
//Ventana de el Chat
import java.awt.*;
import java.lang.*;
import java.net.*;
import java.io.*;

public class Chat extends Frame{
	String nick,email, sala;
	Socket sckt;
	static TextArea en_comun;
	static List usrs;
	static String buffer_salida;
	TextField entrada;
	Client c;
	public Chat(String n, String em, String Sal){
		nick = n;
		email= em;
		sala = Sal;
		buffer_salida="";
		
		resize(490,340);
		
		en_comun = new TextArea(80,40);
		en_comun.setEditable(false);
		en_comun.appendText("Mensajes en común"+"/n");
		add("West",en_comun);
		
		usrs = new List(40,false);
		add("East",usrs);
		
		entrada=new TextField(100);
		add("South",entrada);
		
		setResizable(false);
		setTitle("OlimarChat");
		
		show();
		entrada.requestFocus();
		
	}
	public boolean handleEvent(Event evt){
		if(evt.id==evt.WINDOW_EXPOSE){
			entrada.requestFocus();
			return true;
		}
		if(evt.key==10){							//enter
		//Lo mando al buffer de salida
		c.escribir_buffer(entrada.getText());
		entrada.setText("");
		return true;
	}
   return (false);
 }
}
Código:
i
mport java.io.*;
import java.net.*;
import java.awt.*;
import java.lang.*;

public class Client extends Chat{
	Socket socket;
	TextArea en_comun;
	List usrs;
	String nick,email,sala;
	public static String buffer_salida;
	
	public Client(String ni, String em,TextArea ta, String sa, List l){
	
	super(ni,em,sa);
	nick=ni;
	email=em;
	en_comun=ta;
	usrs=l;
	sala=sa;
	buffer_salida="";
}
public synchronized void escribir_buffer(String s){
	buffer_salida=s;
}
public synchronized String leer_buffer(){
	return buffer_salida;
}

public void Client(){
	//nos conectamos..
	
	try{ //por si acaso...jejeje
	socket = new Socket("localhost",25);
	PrintStream sale = new PrintStream(socket.getOutputStream());
DataInputStream entra = new DataInputStream(socket.getInputStream());
	//le digo quien soy
	sale.println(nick);
	sale.println(email);
	boolean conectado= false;
	String mensaje="";
	
	//espero el mesaje de bienvenida..
	mensaje=entra.readLine();
	en_comun.appendText(mensaje+"\n");
	boolean salir = false;
	
	usrs.addItem("a todos");
	usrs.select(0);
	do{
		if(!leer_buffer().equals("")){
			//mando lo que hay pa' madar
			if(leer_buffer().equals("/quit")){
				salir = true;
				sale.println("/quit");
			}
			else{
		sale.println(usrs.getSelectedItem()+":"+leer_buffer());
		escribir_buffer("");
			}
		}
		if(entra.available()!=0){
			mensaje=entra.readLine();
			if(!mensaje.equals("")){
				if(mensaje.lastIndexOf("***entró")!=-1){
				int donde;
		donde=mensaje.lastIndexOf("con el nick");
	usrs.addItem(mensaje.substring(donde+13,mensaje.length()));
			en_comun.appendText(mensaje+"\n");
				}
				else
			if(mensaje.lastIndexOf("***Se fué")!=-1){
						int i, donde;
						String quien;
			quien =mensaje.substring(12);
			i=1;
			while(!usrs.getItem(i).equals(quien)){
					i++;
						}
			usrs.delItem(i);
						en_comun.appendText(mensaje+"\n");
					}
					else{
						en_comun.appendText(mensaje+"\n");
					}
				}
			}
		}
		while(!salir);
		socket.close();
	}
	catch (IOException e){
		System.out.println(e);
	}
}
}
Pfff
Espero no haber abusado de el espacio ....
  #2 (permalink)  
Antiguo 23/02/2005, 13:33
 
Fecha de Ingreso: octubre-2004
Mensajes: 10
Antigüedad: 19 años, 6 meses
Puntos: 0
hey..nadie me responde... snif...
  #3 (permalink)  
Antiguo 24/02/2005, 05:53
 
Fecha de Ingreso: febrero-2005
Mensajes: 396
Antigüedad: 19 años, 2 meses
Puntos: 1
Es que tragarse todo el codigo a lo bestia es un poco duro.

No estoy seguro, pero me parece que haces un bucle do / while en el que si hay datos para mandar los mandas, pero si no, sigue iterando. El programa consume todos los recursos seguramente dando "vueltas" en ese bucle, aunque no haga nada.

Quizás laidea tendria que ir por otro lado: el proceso que tiene que mandar datos se bloquea hasta que haya datos (es decir, que no haga nada). Quizas las instrucciones de mandar tendrias que implementarlas cuando ocurra el evento de pulsar INTRO en la etiqueta donde se escribe.

Un saludo

Zerjillo
  #4 (permalink)  
Antiguo 24/02/2005, 07:56
 
Fecha de Ingreso: octubre-2004
Mensajes: 10
Antigüedad: 19 años, 6 meses
Puntos: 0
Gracias..voy a probar hacer eso ...si alguien tiene alguna idea con gusto la tendré en cuenta.
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 02:45.