SOKETS CHAT

cliente.java

aplicacion cliente del chat simple desarrollado en java.
compilar con :
javac cliente.java
ejecutar con :
java cliente [direccion ip o nombre del equipo servidor]
***********************************************************************/

// Librerias Necesarias
import java.awt.*; // modo grafico
import java.io.*; // entrada/salida
import java.net.*; // funciones de red

public class cliente extends Frame {

// elementos de la ventana
static Button enviar = new Button("Enviar");
static Button cerrar = new Button("Cerrar");
static TextArea texto = new TextArea(10,40);
static TextField mensaje = new TextField(40);

// Componentes de la comunicacion
static Socket servidor; // socket servidor
static InetAddress direccion; // direccion del servidor
static String mensa = "";
static PrintStream ps; // flujo de salida
static DataInputStream datos; // flujo de entrada

// funcion principal
public static void main( String args[]) {

//crear instancia ventana
new cliente();

//crear socket cliente relacionado con el servidor
try{
direccion = getdir(args); // llamada a getdirs()
servidor = new Socket(direccion, 5000); // creacion del socket servidor
activar();

// inicializar el flujo de salida con los datos del servidor
ps = new PrintStream(servidor.getOutputStream());
// inicializar el flujo de entrada
datos = new DataInputStream(servidor.getInputStream());

texto.append("Conectado con el servidor ...\n");

// ciclo de recepcion de mensajes
while((mensa = datos.readLine()) != null){
texto.append("Servidor dice : "+mensa+"\n");
};

texto.append("Desconectado del servidor ...\n");
cerrarconexion();
desactivar();

}catch (IOException e) { // en caso de error de entrada/salida
System.out.println("Error al conectar con el servidor");
System.exit(1);
};
}

// funcion que grafica
public cliente() {

// titulo de la ventana
setTitle("Java Chat Cliente");

// elementos de la ventana
Panel pan = new Panel();
pan.add(enviar);
pan.add(cerrar);

Panel pan1 = new Panel();
pan1.add(mensaje);

Panel pan2 = new Panel();
pan2.add(texto);

add("North",pan2);
add("Center",pan1);
add("South",pan);

enviar.disable();
texto.disable();
mensaje.disable();

// tama¤o constante
setResizable(false);

// organizar y mostrar
pack();
show();
}
public boolean action(Event ev, Object arg) {

// eventos en los botones

// click en el boton cerrar
if((ev.target == cerrar)&&(ev.id == 1001)){
cerrarconexion();
System.exit(0);
}

// click en el boton enviar
if((ev.target == enviar)&&(ev.id == 1001)){
if(!mensaje.getText().equals("")){
ps.println(mensaje.getText()); // enviar el contenido de texto
texto.append("Cliente dice : "+mensaje.getText()+"\n");
mensaje.setText("");
}
}
return(true);
}

// esta funcion habilita los elementos de la ventana
public static void activar(){
enviar.enable();
mensaje.enable();
}

// esta funcion deshabilita los elementos de la ventana
public static void desactivar(){
enviar.disable();
mensaje.disable();
}

// funcion que convierte la direccion ip o el nombre del equipo donde esta
// corriendo el socket servidor que se pasa como parametro al programa
public static InetAddress getdir(String ar[]){
InetAddress tem = null;
try{
// si no hay argumentos tomar localhost
if(ar.length == 0){
tem = InetAddress.getLocalHost();
}
// si hay convertirla de string a inetaddress
if(ar.length == 1){
tem = InetAddress.getByName(ar[0]);
}
// error en la direccion
}catch(UnknownHostException e){
texto.append("Error en la direccion.");
}
return(tem);
}

// funcion que cierra la conexion con el servidor
public static void cerrarconexion(){
try{
servidor.close();
}catch(IOException e){
texto.append("Error al cerrar el cliente");
};
desactivar();
}
}
**************************************************************************

servidor.java
aplicacion servidora del chat simple desarrollado en java.
compilar con :
javac servidor.java
ejecutar con :
java servidor
***********************************************************************/

// Librerias Necesarias
import java.awt.*; // modo grafico
import java.io.*; // entrada/salida
import java.net.*; // funciones de red

public class servidor extends Frame {

// elementos de la ventana
static Button enviar = new Button("Enviar");
static Button cerrar = new Button("Cerrar");
static TextArea texto = new TextArea(10,40);
static TextField mensaje = new TextField(40);

// Componentes de la comunicacion
static ServerSocket servido; // socket servidor
static Socket cliente; // socket para manejar los clientes
static String mensa = "";
static PrintStream ps; // flujo de salida
static DataInputStream datos; // flujo de entrada

// funcion principal
public static void main( String args[]) {

// crear instancia ventana
new servidor();

// crear socket servidor en el puerto 5000
// se puede cambiar a nuestro gusto
try{
servido = new ServerSocket(5000);
// error al crear el servidor
}catch (IOException e) {
System.out.println("Error al crear el Socket Servidor");
System.exit(1);
};

// ciclo para el tratamiento de los clientes
do{
try{

texto.append("Esperando Cliente ...\n");

//esperar cliente
cliente = servido.accept();
activar();
texto.append("Llego un cliente. Respondele ...\n");

// inicializacion de las estructuras para la lectura/escritura
// con los datos del cliente
ps = new PrintStream(cliente.getOutputStream());
datos = new DataInputStream(cliente.getInputStream());

// ciclo de recepcion de mensajes
while((mensa = datos.readLine()) != null){
texto.append("Cliente dice : "+mensa+"\n");
};

texto.append("\nTerminando la conexion con el cliente.\n");
cerrarconexion();
texto.append("\nEl cliente se ha desconectado.\n");

}catch (IOException e) {
texto.append("Error de Lectura / Escritura en los Sockets\n");
desactivar();
};
}while(true); // ciclo infinito. se desconecta un cliente y esperamos
// otro. para salir debemos dar click en el boton cerrar
}

// funcion que grafica
public servidor() {

// titulo de la ventana
setTitle("Java Chat Servidor");

// elementos de la ventana
Panel pan = new Panel();
pan.add(enviar);
pan.add(cerrar);

Panel pan1 = new Panel();
pan1.add(mensaje);

Panel pan2 = new Panel();
pan2.add(texto);

add("North",pan2);
add("Center",pan1);
add("South",pan);

enviar.disable();
texto.disable();
mensaje.disable();

// tama¤o constante
setResizable(false);

// organizar y mostrar
pack();
show();
}

public boolean action(Event ev, Object arg) {

// eventos en los botones

// click en el boton cerrar
if((ev.target == cerrar)&&(ev.id == 1001)){
cerrarconexion();
System.exit(0);
}
// click en el boton enviar
if((ev.target == enviar)&&(ev.id == 1001)){
if(!mensaje.getText().equals("")){
ps.println(mensaje.getText());
texto.append("Servidor dice : "+mensaje.getText()+"\n");
mensaje.setText("");
}
}
return(true);
}

// esta funcion habilita los elementos de la ventana
public static void activar(){
enviar.enable();
mensaje.enable();
}

// esta funcion deshabilita los elementos de la ventana
public static void desactivar(){
enviar.disable();
mensaje.disable();
}

// funcion que cierra la conexion con el cliente
public static void cerrarconexion(){
try{
cliente.close();
}catch(IOException e){
texto.append("Error al cerrar el cliente");
};
desactivar();
}
}

0 comentarios:

Publicar un comentario