MESSENGER UDP: CON 3 POSIBLES USUARIOS PC0,PC1 Y PC2

 

 

 

Clickar aquí  para visualizar la imagen ampliada

Descarga del fichero ejecutable.

Descarga del entorno de programación del programa (comprimido con winrar)

 

Este es un programa de comunicación basado en la comunicación por datagramas y ejecutado 3 veces y escogiendo 3 usuarios distintos se puede establecer una comunicación a tres bandas.

 

Si estamos dentro de una red deberíamos también cambiar las IPs de los ordenadores, en este caso se supone que se ejecutan los tres en el mismo PC.

 

Se monta un formulario con dos richEdits (el 1 para visualizar la información y el otro para enviarla) un label debajo, para visualizar los mensajes del programa, tres botones de opción para seleccionar el destinatario de la comunicación y dos botones, uno que establece la comunicación (inicia las conexiones datagrama) y el otro que sirve para enviar los paquetes.

 

En esta versión del programa antes de comenzar hay que seleccionar el usuario que se es desde el menú y pulsar conectar y luego hay que seleccionar el usuario con quien se va a establecer la comunicación.

 

En la imagen (ampliable) se puede ver que se establece correctamente la comunicación entre 3.

 

El código en java de Microsoft seria:

 

import com.ms.wfc.app.*;

import com.ms.wfc.core.*;

import com.ms.wfc.ui.*;

import com.ms.wfc.html.*;

//añadimos las librerias de red y entrada y salida de datos

import java.net.*;

import java.io.*;

 

public class Form1 extends Form

{

               

                //declaramos lo que vamos a necesitar

                //Una clase del tipo hilo que todavia no hemos creado

                HiloEspera hilo,hilo1,hilo2;

                //declaramos las conexiones y los paquetes

                DatagramSocket conEnviar, conRecibir;

                DatagramPacket paqEnviar, paqRecibir;

                boolean conectado=false;

                //Declaramos las direcciones IP de los ordenadores conectados

                String miIP,PC1IP,PC2IP;

                //Declaramos los puertos de entrada y salida de cada uno de los ordenadores

                int miPE=0,miPS=0,PC1PE=0,PC1PS=0,PC2PE=0,PC2PS=0;

                int usuario=0;

               

                public Form1()

                {

                               initForm();

                               //llamamos a una función init para inicializar los valores

                               init();

                }

                public void init()

                {

                //Inicializamos los puertos de entrada  de los ordenadores y las IPs//Atención lo puertos de salida no son necesarios

 

                               miPE=6000;

                               miPS=6001;

                               PC1PE=6002;

                               PC1PS=6003;

                               PC2PE=6004;

                               PC2PS=6005;

                              

                               try{

                                               //Recojo la IP de mi ordenador, podria ser 192.156.232.12

                                               miIP= InetAddress.getLocalHost().toString();

                                              

                                               PC1IP=miIP;

                                               PC2IP=miIP;

                              

                               }catch(IOException ioe)

                               {

}

 

                }

               

                //funcion para iniciar el programa con distintos usuarios

                public void iniciarConexion(){

                               int PS=6001,PE=6000;

                               //inicializo las conexiones para disitintos usuarios

                               if(usuario==0){PS=miPS;PE=miPE;this.setText("PC0: PE="+PE+" PS="+PS+" IP:"+miIP);}

                               if(usuario==1){PS=PC1PS;PE=PC1PE;this.setText("PC1: PE="+PE+" PS="+PS+" IP:"+miIP);}

                               if(usuario==2){PS=PC2PS;PE=PC2PE;this.setText("PC2: PE="+PE+" PS="+PS+" IP:"+miIP);}

               

                               //inicializamos las conexiones para enviar y para recibir

                               try

                               {

                                               //dejo que la conexión para enviar la haga por cualquier puerto

                                               conEnviar= new DatagramSocket();

                                               //la conexión para recibir si la inicializo para el puerto de entrada

                                               conRecibir= new DatagramSocket(PE);

                                               label1.setText("Se inicia");

                               }

                               catch(SocketException se)

                               {

                                               label1.setText("No se inicia");

                              

                               }

                               conectado=false;   

                }

               

               

               

               

                //Clase Hilo que ejecuta la funcion esperar paquetes

                              

                public class HiloEspera extends Thread

                {

                               public HiloEspera()

                               {}

                              

                               public void run()

                               {

                                               esperarPaquetes();

                               }

                }

               

                //funcion esperar paquetes

                public void esperarPaquetes()

                {              label1.setText("Inicia la espera de paquetes");

                               while(true)

                               {

                                               byte array[]= new byte[50];

                                               try

                                               {

                                                               paqRecibir = new DatagramPacket(array,array.length);

                                                               conRecibir.receive(paqRecibir);

                                                              

                                                               /*CODIGO NO NECESARIO

                                                               //Escribimos en el richedit la dirección ip del ordenador que envia el paquete

                                                               richEdit1.setText(richEdit1.getText()+"\n"+paqRecibir.getAddress().toString());

                                                               //Escribimos en el richedit el puerto por donde lo envia

                                                               richEdit1.setText(richEdit1.getText()+"\n"+String.valueOf(paqRecibir.getPort()).toString());

                                                               //Escribimos en el richedit los datos por donde lo envia

                                                               richEdit1.setText(richEdit1.getText()+"\n"+String.valueOf(paqRecibir.getData()).toString());

                                                               //Escribo el contenido de los datos

                                                               */

                                                              

                                                               String datos=new String(array);

                                                               richEdit1.setText(richEdit1.getText()+datos);

                                               }

                                               catch(IOException ex)

                                               {}

                                              

                               }

               

                }

               

               

                public void dispose()

                {

                               super.dispose();

                               components.dispose();

                }

 

                private void Form1_click(Object source, Event e)

                {

                              

                }

 

                //Zona protegida por el editor

               

                private void button2_click(Object source, Event e)

                {

                                              

                              

                              

                               if(!conectado)

                               {

                                               iniciarConexion();

                                               if(usuario==0){hilo = new HiloEspera();hilo.start();label1.setText("Creo hilo");}

                                               if(usuario==1){hilo1 = new HiloEspera();hilo1.start();label1.setText("Creo hilo1");}

                                               if(usuario==2){hilo2 = new HiloEspera();hilo2.start();label1.setText("Creo hilo2");}

                                               button2.setText("Desconectar");

                                               button1.setEnabled(true);

                                               conectado=true;

                                               label1.setText(label1.getText()+": Conectado");

                               }else{

                                               if(usuario==0){hilo.stop();hilo=null;label1.setText("Anulo hilo");}

                                               if(usuario==1){hilo1.stop();hilo1=null;label1.setText("Anulo hilo1");}

                                               if(usuario==2){hilo2.stop();hilo2=null;label1.setText("Anulo hilo2");}

                                               button2.setText("Conectar");

                                               conectado=false;

                                               button1.setEnabled(false);

                                               label1.setText(label1.getText()+": Desconectado");

                               }

                                              

                }

 

                private void button1_click(Object source, Event e)

                {

                               String soy="\n";

                               if(usuario==0)soy+="PC0";//Añado el cambio de linea al nombre

                               if(usuario==1)soy+="PC1";

                               if(usuario==2)soy+="PC2";

                              

                               String texto= soy + " dice: \n" + richEdit2.getText();

                               if(radioButton1.getChecked())

                               {

                                              

                                               try

                                               {

                                                               byte array[]= texto.getBytes();

                                                               paqEnviar= new DatagramPacket(array,array.length,InetAddress.getLocalHost(),PC1PE);

                                                               conEnviar.send(paqEnviar);

                                                               label1.setText("Datos enviados al Puerto: "+PC1PE);

                                               }catch(IOException ioe)

                                               {

                                                               label1.setText("No se ha podido enviar");

                                               }

                               }

                               else if(radioButton2.getChecked())

                               {

                                               try

                                               {

                                                               byte array[]=  texto.getBytes();

                                                               paqEnviar= new DatagramPacket(array,array.length,InetAddress.getLocalHost(),PC2PE);

                                                               conEnviar.send(paqEnviar);

                                                               label1.setText("Datos enviados al Puerto: "+PC2PE);

                                               }catch(IOException ioe)

                                               {

                                                               label1.setText("No se ha podido enviar");

                                               }

                               }

                               else if(radioButton3.getChecked())

                               {

                                               try

                                               {

                                                               byte array[]=  texto.getBytes();

                                                               paqEnviar= new DatagramPacket(array,array.length,InetAddress.getLocalHost(),miPE);

                                                               conEnviar.send(paqEnviar);

                                                               label1.setText("Datos enviados al Puerto: "+miPE);

                                               }catch(IOException ioe)

                                               {

                                                               label1.setText("No se ha podido enviar");

                                               }

                               }else

                               {

                                               label1.setText("Seleccione un destinatario");

                               }

                }

 

                private void menuItem4_click(Object source, Event e)

                {

                               usuario=0;

                                               iniciarConexion();

                }

 

                private void menuItem5_click(Object source, Event e)

                {

                               usuario=1;

                                               iniciarConexion();

                }

 

                private void menuItem6_click(Object source, Event e)

                {

                               usuario=2;

                                               iniciarConexion();

                }

 

                private void menuItem2_click(Object source, Event e)

                {

                               Application.exit();

                }

 

                /**

                 * NOTE: The following code is required by the Visual J++ form

                 * designer.  It can be modified using the form editor.  Do not

                 * modify it using the code editor.

                 */

                Container components = new Container();

                RichEdit richEdit1 = new RichEdit();

                RichEdit richEdit2 = new RichEdit();

                Button button1 = new Button();

                Button button2 = new Button();

                RadioButton radioButton1 = new RadioButton();

                RadioButton radioButton2 = new RadioButton();

                RadioButton radioButton3 = new RadioButton();

                Label label1 = new Label();

                MainMenu mainMenu1 = new MainMenu();

                MenuItem menuItem1 = new MenuItem();

                MenuItem menuItem2 = new MenuItem();

                MenuItem menuItem3 = new MenuItem();

                MenuItem menuItem4 = new MenuItem();

                MenuItem menuItem5 = new MenuItem();

                MenuItem menuItem6 = new MenuItem();

                Label label2 = new Label();

 

                private void initForm()

                {

                               richEdit1.setEnabled(false);

                               richEdit1.setFont(Font.DEFAULT_GUI);

                               richEdit1.setForeColor(Color.WINDOWTEXT);

                               richEdit1.setLocation(new Point(8, 8));

                               richEdit1.setSize(new Point(240, 200));

                               richEdit1.setTabIndex(0);

                               richEdit1.setText("");

 

                               richEdit2.setFont(Font.DEFAULT_GUI);

                               richEdit2.setForeColor(Color.WINDOWTEXT);

                               richEdit2.setLocation(new Point(8, 216));

                               richEdit2.setSize(new Point(184, 32));

                               richEdit2.setTabIndex(1);

                               richEdit2.setText("");

 

                               button1.setEnabled(false);

                               button1.setLocation(new Point(200, 216));

                               button1.setSize(new Point(48, 32));

                               button1.setTabIndex(2);

                               button1.setText("Enviar");

                               button1.addOnClick(new EventHandler(this.button1_click));

 

                               button2.setFont(new Font("Microsoft Sans Serif", 8.0f, FontSize.POINTS, FontWeight.NORMAL, true, false, false, CharacterSet.DEFAULT, 0));

                               button2.setLocation(new Point(256, 176));

                               button2.setSize(new Point(80, 32));

                               button2.setTabIndex(3);

                               button2.setText("Conectar");

                               button2.addOnClick(new EventHandler(this.button2_click));

 

                               radioButton1.setBackColor(new Color(255, 192, 128));

                               radioButton1.setLocation(new Point(256, 48));

                               radioButton1.setSize(new Point(80, 24));

                               radioButton1.setTabIndex(4);

                               radioButton1.setText("PC1");

 

                               radioButton2.setBackColor(new Color(255, 192, 128));

                               radioButton2.setLocation(new Point(256, 72));

                               radioButton2.setSize(new Point(80, 32));

                               radioButton2.setTabIndex(5);

                               radioButton2.setText("PC2");

 

                               radioButton3.setBackColor(new Color(255, 192, 128));

                               radioButton3.setLocation(new Point(256, 104));

                               radioButton3.setSize(new Point(80, 32));

                               radioButton3.setTabIndex(6);

                               radioButton3.setText("PC0");

 

                               label1.setLocation(new Point(0, 256));

                               label1.setSize(new Point(240, 24));

                               label1.setTabIndex(7);

                               label1.setTabStop(false);

                               label1.setText("");

 

                               menuItem2.setText("Salir");

                               menuItem2.addOnClick(new EventHandler(this.menuItem2_click));

 

                               menuItem1.setMenuItems(new MenuItem[] {

                                                                                                                 menuItem2});

                               menuItem1.setText("Archivo");

 

                               menuItem4.setText("PC0");

                               menuItem4.addOnClick(new EventHandler(this.menuItem4_click));

 

                               menuItem5.setText("PC1");

                               menuItem5.addOnClick(new EventHandler(this.menuItem5_click));

 

                               menuItem6.setText("PC2");

                               menuItem6.addOnClick(new EventHandler(this.menuItem6_click));

 

                               menuItem3.setMenuItems(new MenuItem[] {

                                                                                                                 menuItem4,

                                                                                                                 menuItem5,

                                                                                                                 menuItem6});

                               menuItem3.setText("Yo soy:");

 

                               mainMenu1.setMenuItems(new MenuItem[] {

                                                                                                                 menuItem1,

                                                                                                                 menuItem3});

                               /* @designTimeOnly mainMenu1.setLocation(new Point(256, 232)); */

 

                               this.setBackColor(new Color(255, 192, 128));

                               this.setText("PC0");

                               this.setAutoScaleBaseSize(new Point(5, 13));

                               this.setClientSize(new Point(341, 283));

                               this.setMenu(mainMenu1);

                               this.addOnClick(new EventHandler(this.Form1_click));

 

                               label2.setBackColor(new Color(255, 192, 128));

                               label2.setLocation(new Point(256, 32));

                               label2.setSize(new Point(80, 16));

                               label2.setTabIndex(9);

                               label2.setTabStop(false);

                               label2.setText("Comunicar con:");

 

                               this.setNewControls(new Control[] {

                                                                                                              label2,

                                                                                                              label1,

                                                                                                              radioButton3,

                                                                                                              radioButton2,

                                                                                                              radioButton1,

                                                                                                              button2,

                                                                                                              button1,

                                                                                                              richEdit2,

                                                                                                              richEdit1});

                }

 

               

                //Función Principal

               

                public static void main(String args[])

                {

                               Application.run(new Form1());

                }

}