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

Problemas con un chat

Estas en el tema de Problemas con un chat en el foro de Java en Foros del Web. Hola: Seguro es una tonteria pero por mas vueltas que le doy no consigo solucionar nada. Intento hacer un chat sin AWT o SWING. La ...
  #1 (permalink)  
Antiguo 14/10/2007, 06:12
 
Fecha de Ingreso: agosto-2006
Mensajes: 159
Antigüedad: 17 años, 8 meses
Puntos: 4
Problemas con un chat

Hola:

Seguro es una tonteria pero por mas vueltas que le doy no consigo solucionar nada.

Intento hacer un chat sin AWT o SWING.

La parte de lo que es el servidor ya la tengo puesto que el "cliente" se conecta y "servidor" lo detecta.

Ahora que el cliente solo hace eso porque luego no se mantiene para poder escribir cualquier texto. Es decir, que indico direccion y puerto, y es en sese momento donde debe pararse a esperar instrucciones, o bien de datos recibidos o bien de datos enviados.

Con la parte del servidor tengo el mismo problema, pues este al detectar una nueva conexion deberia abrir un nuevo cliente.

Main servidor(incompleto):
Código:
import java.io.*;
import java.net.*;
public class Main {
    private int status;
    public Main() {
        this.setStatus(1);
    }
    public static void main(String[] args) {
        Main m = new Main();
        try{
            BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
            while(true){
                System.out.println("");
                System.out.println("1. Servidor");
                System.out.println("2. Cliente");
                System.out.println("");
                System.out.println("0. Salir");
                System.out.println("");
                System.out.println("Seleccione una opcion:\n");
                String str = bf.readLine();
                if(str.equalsIgnoreCase("1")){
                    System.out.println("Seleccionado \"Servidor\"\n");
                    Servidor s = new Servidor(m);
                }else if(str.equalsIgnoreCase("2")){
                    System.out.println("Seleccionado \"Cliente\"\n");
                    System.out.println("Indique direccion de destino:\n");
                    String str_1 = bf.readLine();
                    System.out.println("Indique puerto de entrada:\n");
                    String str_2 = bf.readLine();
                    try{
                        new Cliente(new Socket(str_1, Integer.parseInt(str_2)));
                    }catch(NumberFormatException nfe){
                        System.out.println("ERROR: El puerto de entrada de datos no es correcto.\n");
                        continue;
                    }
                }else if(str.equalsIgnoreCase("0")){
                    m.setStatus(0);
                }else{
                    System.out.println("Opcion incorrecta");
                }
            }
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    
    public int getStatus() {
        return status;
    }
    
    public void setStatus(int status) {
        this.status = status;
    }
    
}
Clase servidor
Código:
import java.io.*;
import java.net.*;
import java.util.*;
public class Servidor {
    private Fechador fecha;
    private Vector<String> historico;
    private Main m;
    public Servidor(Main m) throws Exception {
        this.setM(m);
        this.setFecha(new Fechador());
        this.setHistorico(new Vector());
        ServerSocket ss = new ServerSocket(57022);
        while(this.getM().getStatus() != 0){
            System.out.println("Esperando nuevas entradas....");
            Socket so = ss.accept();
            String f = this.getFecha().retornoFecha();
            this.getHistorico().add(so.getInetAddress()+"::"+f);
            System.out.println("Aceptada nueva entrada desde "+so.getInetAddress()+" --> "+f);
            Runnable newCliente = new Cliente(so);
            Thread hilo = new Thread(newCliente);
            hilo.start();
        }
        new Escritor(this.getHistorico());
        System.exit(0);
    }

    public Fechador getFecha() {
        return fecha;
    }

    public void setFecha(Fechador aFecha) {
        fecha = aFecha;
    }

    public Vector<String> getHistorico() {
        return historico;
    }

    public void setHistorico(Vector<String> historico) {
        this.historico = historico;
    }

    public Main getM() {
        return m;
    }

    public void setM(Main m) {
        this.m = m;
    }
}
clase cliente de servidor
Código:
import java.io.*;
import java.net.*;

public class Cliente implements Runnable{
    private Socket so;
    private BufferedReader teclado;
    private DataOutputStream salida;
    private DataInputStream entrada;
    public Cliente(Socket so) throws Exception{
        this.setSo(so);
        this.setTeclado(new BufferedReader(new InputStreamReader(System.in)));
        this.setSalida(new DataOutputStream(this.getSo().getOutputStream()));
        this.setEntrada(new DataInputStream(this.getSo().getInputStream()));
    }
    public void run() {
        try{
        String str_1 = new String();
        String str_2 = new String();
        while(true){
            if((str_1 = this.getTeclado().readLine()) != null){
                this.getSalida().writeUTF(new Fechador().retornoFecha()+" -- Enviado: "+str_1);
            }else if((str_2 = this.getEntrada().readUTF()) != null){
                System.out.println(new Fechador().retornoFecha()+" -- Recibido: "+str_2);
            }
        }
        }catch(Exception e){
            e.printStackTrace();
        }
    }

    public Socket getSo() {
        return so;
    }

    public void setSo(Socket so) {
        this.so = so;
    }

    public DataOutputStream getSalida() {
        return salida;
    }

    public void setSalida(DataOutputStream salida) {
        this.salida = salida;
    }

    public DataInputStream getEntrada() {
        return entrada;
    }

    public void setEntrada(DataInputStream entrada) {
        this.entrada = entrada;
    }

    public BufferedReader getTeclado() {
        return teclado;
    }

    public void setTeclado(BufferedReader teclado) {
        this.teclado = teclado;
    }
}
Clase main de cliente
Código:
import java.io.*;
import java.net.*;
public class Main {
    
    public Main() {
        
    }
    public static void main(String[] args) {
        try{
            while(true){
                System.out.println("Indique direccion de destino:\n");
                BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
                String str_1 = bf.readLine();
                System.out.println("");
                System.out.println("Indique puerto de entrada de datos:\n");
                String str_2 = bf.readLine();
                System.out.println("");
                System.out.println("Conectando....");
                try{
                    Runnable cliente = new Cliente(new Socket(str_1, Integer.parseInt(str_2)));
                    Thread hilo = new Thread(cliente);
                    hilo.start();
                }catch(NumberFormatException nfe){
                    System.out.println("ERROR. El puerto de entrada de datos especificado NO ES VALIDO.\n");
                    System.out.println("");
                    continue;
                }
            }
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}
Clase Cliente de cliente
Código:
import java.io.*;
import java.net.*;

public class Cliente implements Runnable{
    private Socket so;
    private BufferedReader teclado;
    private DataOutputStream salida;
    private DataInputStream entrada;
    public Cliente(Socket so) throws Exception{
        this.setSo(so);
        this.setTeclado(new BufferedReader(new InputStreamReader(System.in)));
        this.setSalida(new DataOutputStream(this.getSo().getOutputStream()));
        this.setEntrada(new DataInputStream(this.getSo().getInputStream()));
    }
    public void run() {
        try{
        String str_1 = new String();
        String str_2 = new String();
        while(true){
            if((str_1 = this.getTeclado().readLine()) != null){
                this.getSalida().writeUTF(new Fechador().retornoFecha()+" -- Enviado: "+str_1);
            }else if((str_2 = this.getEntrada().readUTF()) != null){
                System.out.println(new Fechador().retornoFecha()+" -- Recibido: "+str_2);
            }
        }
        }catch(Exception e){
            e.printStackTrace();
        }
    }

    public Socket getSo() {
        return so;
    }

    public void setSo(Socket so) {
        this.so = so;
    }

    public DataOutputStream getSalida() {
        return salida;
    }

    public void setSalida(DataOutputStream salida) {
        this.salida = salida;
    }

    public DataInputStream getEntrada() {
        return entrada;
    }

    public void setEntrada(DataInputStream entrada) {
        this.entrada = entrada;
    }

    public BufferedReader getTeclado() {
        return teclado;
    }

    public void setTeclado(BufferedReader teclado) {
        this.teclado = teclado;
    }
}
Ojala alguien me de un cable por favor.
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 11:12.