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); } }