MESSENGER EN JAVA2: PROGRAMAS SERVIDOR-CLIENTE_TCP


Descarga de ficheros: PROGJAVA16C.rar
Descarga de ficheros: PROGJAVA16S.rar



SERVIDOR_TPC: Estará formado por dos clases: ServidorTCP y NuevoCliente en sendos ficheros ServidorTCP.java y NuevoCliente.java

 

ServidorTCP

 

import java.awt.*;//Incorpora los objetos típicos del java en windows pero no los eventos

import java.net.*;//Incorpora los objetos de red

import java.io.*;//Incorpora los objetos de entrada y salida de datos

 

 

public class ServidorTCP extends Frame //creamos una clase del tipo ventana

{

 

                //Declaración de objetos

                public TextArea entrada; //Cuadro de TExto

                public ServerSocket conexion; //Conexión del tipo servidor

                int clientes; //Contador de Clientes

 

                //Función constructor donde inicializamos los objetos y

                //las variables

                ServidorTCP()

                {

                               setTitle("ServidorTCP"); //Ponemos un Título a la ventana del servidor

                               setSize(350,400); //Le damos un tamaño

                               entrada = new TextArea(20,40); //creamos el cuadro de texto y le damos un tamaño

                               entrada.setEditable(false); //Hacemos que no sea editable

                               add(entrada); //Lo añadimos a la ventana

                               setVisible(true);//Lo hacemos visible

                               clientes=0; //Inicializamos la variable clientes

                              

                }

 

                void lanzarServidor() //función lanzar Servidor

                {

               

                               try

                               {              //Establece la conexión por el puerto 6520 y soportará 50 conexiones como máximo

                                               conexion = new ServerSocket(6520,50);

                                               while (true)

                                               new NuevoCliente(conexion.accept(), this, clientes++).start();

                                               //Bucle infinito que espera la conexión de nuevos clientes

                               }

                               catch(IOException e)

                               {

                               }

 

                }

 

                public void añadir(String texto) //Función añadir texto al cuadro de texto

                {

                               entrada.append(texto);

                }

 

                public static void main(String args[]) //Función principal ServidorTCP

                {

                               ServidorTCP Servidor = new ServidorTCP(); //Creamos un objeto de la clase

        Servidor.lanzarServidor();//Llamamos a la función que ejecuta el servidor

                }

}

 

NuevoClienteTCP

 

import java.awt.*;

import java.net.*;

import java.io.*;

 

/**

 */

public class NuevoCliente extends Thread //Clase del tipo Hilo

{

               

                //Declaración de objetos y variables

                Socket conexion; //Declaramos la conexión

                ServidorTCP servidor;//Declaramos un objeto del tipo ServidorTCP

    int cliente;//Un entero que contendrá el número de cliente

    DataInputStream entrada; //Flujo de entrada de datos

    DataOutputStream salida;//Flujo de salida de datos

 

                //Función constructor con tres parámetros, una conexión, un ServidorTCP y un entero

                NuevoCliente(Socket c, ServidorTCP s, int numero)

    {

                               //Inicializamos las variables a los parámetros del nuevo cliente

                               conexion = c;

                               servidor = s;

                               cliente = numero;

                               try //Inicializamos los flujos de entrada y salida de la conexión

        {

                                               entrada =new DataInputStream(conexion.getInputStream());

                                               salida =new DataOutputStream(conexion.getOutputStream());

                               }

        catch(IOException e)

        {

        }

                }

                public void run()//función run del hilo

    {

                               boolean salir = false;//variable que indica si un cliente está o no conectado

                               servidor.añadir("Cliente " + cliente + " se ha conectado\n");

                               while(!salir)//mientras se está conectado

                               {

                                               try

                                               {

                                                               String cadena = entrada.readUTF();

                                                               if(cadena.equals("Salir"))

                                                               salir = true;

                                                               else

                                                               {

                                                                              servidor.añadir("El cliente " + cliente + " ha enviado:\n" + "     " + cadena + '\n');

                                                                              salida.writeUTF("cadena \" "+cadena+"\" recibida");

                                                               }

                                               }

                                               catch(IOException e)

                                               {

                                               }

                                               catch(NullPointerException e)

                                               {

                                               }

                               }

                               //En caso de desconexión

                               servidor.añadir("Se ha ido el cliente " + cliente + "\n");

        try

                               {

                                               conexion.close();

                               }

                               catch(IOException e)

                               {

                               }

                }

}

 

CLIENTE_TPC: Estará formado por una clase: ClienteTCP en el fichero ClienteTCP.java

 

ClienteTCP


import java.awt.*;

import java.net.*;

import java.io.*;

import java.awt.event.*;//Se incorporan los eventos asociados a los objetos de awt.

 

 

public class ClienteTCP extends Frame implements ActionListener

{

 

                        Panel panel;//Declaramos un panel para agrupar objetos

            Socket conexion; //Declaramos una conexión

            DataOutputStream salida; //Un flujo de salida de datos

            DataInputStream entrada; //Declaramos un flujo de entrada de datos

 

            TextField textosalida;//Declaramos los cuadros de texto de entrada y salida

                                               Label textoentrada;

            Button enviar, conectar, desconectar;//Declaramos los botones, conectar,desconectar y enviar

 

                                               //Función constructor

            ClienteTCP(String nombre)

            {

                                                               super(nombre);//Ponemos el nombre en la ventana también se podria hacer setTitle(nombre)

                setSize(350,200);//Establecemos el tamaño de la ventana

                panel = new Panel();//Creamos el panel

                textosalida = new TextField(40);//Creamos el cuadro de texto de salida

                textoentrada = new Label();//Creamos el cuadro de texto de entrada

                textoentrada.setText("Pulsa el botón \" Conectar\" para conectarte");//Escribimos en el cuadro de entrada

                enviar= new Button("Enviar");//Creamos el botón enviar

                                                               //Al comienzo el botón enviar está inhabilitado

                                                               enviar.setEnabled(false);

                conectar = new Button ("Conectar");//Creamos el botón conectar

                desconectar = new Button("Desconectar");//Creamos el botón desconectar

                desconectar.setEnabled(false);//El botón desconectar estará deshabilitado

                                                               //Añadimos todos los objetos al panel, además añadimos dos etiquetas.

                                                               panel.add(new Label("Datos a enviar"));

                panel.add(textosalida);

                panel.add(new Label("Datos recibidos"));

                                                               panel.add(textoentrada);

                panel.add(enviar);

                panel.add(conectar);

                panel.add(desconectar);

                                                               //Añadimos los eventos de acción asociados a los tres botones

                                                               enviar.addActionListener(this);

                conectar.addActionListener(this);

                desconectar.addActionListener(this);

                                                               //Añadimos el panel a la ventana del programa

                add(panel);

                                                               //Establecemos la propiedad visible en true

                setVisible(true);

            }

 

           

                                               //Función asociada a los eventos de los botones que es necesaria al implementar la clase ActionListener

            public void actionPerformed(ActionEvent e)

            {

                                                               //Para distinguir los eventos realizados por los botones recojemos el texto que contiene el botón

                                                               String com = e.getActionCommand();

                                                               //Y los comparamos con:

                                                               if(com.equals("Enviar"))

                {

                                                                              //El botón enviar

                                try

                                                                              {

                                    textoentrada.setText("");

                        salida.writeUTF(textosalida.getText());

                        textoentrada.setText(entrada.readUTF());

                        textosalida.setText("");

                    }

                    catch(IOException excepcion)

                   {

                   }

                                                               }

                                                               else

                                                               if(com.equals("Conectar"))

                                                               {

                                                                              //Botón conectar

                                                                              try

                                                                              {

                                                                                              //Si cambiamos InetAddress.getLocalHost() por la dirección de otro ordenador

                                                                                              //entonces enviaremos el mensaje a aquel ordenador en concreto

                                                                                              //Enviamos al ordenador local por el puerto 6520

                                                                                              conexion = new Socket(InetAddress.getLocalHost(),6520);

                                                                                              salida = new DataOutputStream(conexion.getOutputStream());

                                                                                              entrada = new DataInputStream(conexion.getInputStream());

                                                                                              conectar.setEnabled(false);

                                                                                              desconectar.setEnabled(true);

                                                                                              enviar.setEnabled(true);

                                                                                              textoentrada.setText("Conectado");

                                                                              }

                    catch(IOException ex)

                    {

                    }

                                                               }

                else

                                                               {

                                                                              try

                                                                              {

                                                                                              //Botón salir

                                                                                              salida.writeUTF("Salir");

                                                                                              conexion.close();

                                                                                              conectar.setEnabled(true);

                                                                                              desconectar.setEnabled(false);

                                                                                              enviar.setEnabled(false);

                                                                                              textoentrada.setText("Pulsa el boton \" Conectar \" para conectarte");

                                                                              }

                                                                              catch(IOException exc)

                                                                              {

                                                                              }

                                                               }

                                               }

                                               //Función Principal

            public static void main(String args[])

            {

                            new ClienteTCP("Cliente Angel");

                new ClienteTCP("Cliente Pepe");

            }

}