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:
Clase servidorimport 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; } }
Código:
clase cliente de servidorimport 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; } }
Código:
Clase main de clienteimport 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; } }
Código:
Clase Cliente de clienteimport 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(); } } }
Código:
Ojala alguien me de un cable por favor. 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; } }