import java.lang.System;
import java.net.Socket;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.io.*;
public class Cliente
{
public static void main(String args[])
{
CHAT portTalk = new CHAT(args);
portTalk.MuestraParametrosDestino();
portTalk.MuestraParametrosLocales();
portTalk.chat();
portTalk.shutdown();
}
}
class CHAT
{
Socket ConecciOn;
DataOutputStream outStream;
BufferedReader inStream;
public CHAT(String args[])
{
if(args.length!=2) error("Uso: java Cliente host port");
String Destino = args[0];
int puerto = 0;
try
{
puerto = Integer.valueOf(args[1]).intValue();
} catch (NumberFormatException ex){ error("NUmero de puerto invAlido..."); }
try
{
ConecciOn = new Socket(Destino, puerto);
} catch (UnknownHostException ex) { error("MAquina desconocida...-host-"); }
catch (IOException ex) { error("Error creando sockets"); }
try
{
inStream = new BufferedReader(new InputStreamReader(ConecciOn.getInputStream()));
outStream = new DataOutputStream(ConecciOn.getOutputStream());
} catch (IOException ex) { error("Error obteniendo flujos"); }
System.out.println("Conectado a "+Destino+" en el puerto "+puerto+".");
}
public void MuestraParametrosDestino()
{
InetAddress destAddress = ConecciOn.getInetAddress(); // Datos de la mAquina con la que se conecta
String name = destAddress.getHostName(); // Nombre del host
byte ipAddress[] = destAddress.getAddress(); // DirecciOn IP
int puerto = ConecciOn.getPort(); // Puerto con el que se conecta
MuestraParAmetros("Destino ",name,ipAddress,puerto);
}
public void MuestraParametrosLocales()
{
InetAddress localAddress = null;
try { localAddress = InetAddress.getLocalHost(); } // Datos de la mAquina local
catch (UnknownHostException ex) { error("Error al leer informaciOn local"); }
String Nombre = localAddress.getHostName(); // Nombre de la mAquina
byte ipAddress[] = localAddress.getAddress(); // IP local
int puerto = ConecciOn.getLocalPort(); // Puerto local
MuestraParAmetros("Local ",Nombre,ipAddress,puerto);
}
public void MuestraParAmetros(String s,String name,byte ipAddress[],int puerto)
{
System.out.println("host " +s+" es "+name+".");
System.out.print(s+"DirecciOn IP: ");
for(int i=0;i<ipAddress.length;++i)
System.out.print(ipAddress[i]+".");
//System.out.print((ipAddress[i]+256)%256+".");
System.out.println();
System.out.println(s+"Puerto "+puerto+".");
}
public void chat()
{
BufferedReader Teclado = new BufferedReader(new InputStreamReader(System.in));
boolean fin = false;
do
{
try
{
System.out.print("Enviar, Recibir, o salir (E/R/S): ");
System.out.flush();
String linea = Teclado.readLine();
if(linea.length()>0)
{
linea=linea.toUpperCase();
switch (linea.charAt(0))
{
case 'E':
String sendLine = Teclado.readLine();
outStream.writeBytes(sendLine);
outStream.write(10);
outStream.flush();
break;
case 'R':
int inByte;
System.out.print("***");
while ((inByte = inStream.read()) != '\n')
System.out.write(inByte);
System.out.println();
break;
case 'S':
fin=true;
outStream.writeBytes("salir");
break;
default:
break;
}
}
} catch (IOException ex) { error("Error leyendo del teclado o del socket"); }
} while(!fin);
}
public void shutdown() { try { ConecciOn.close(); } catch (IOException ex) { error("IO error cerrando socket"); } }
public void error(String s) { System.out.println(s); System.exit(1); }
}