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.