import com.ms.wfc.app.*;
import com.ms.wfc.core.*;
import com.ms.wfc.ui.*;
import
com.ms.wfc.html.*;
import java.net.*;
//incorporamos los recursos de red
import java.io.*; //incorporamos los recursos de entrada y salida
de datos
public class Form1 extends Form
{
int p_e, p_s,
id_cliente;//Declaramos los números enteros: puerto
de entrada, puerto de salida y identificador de cliente
String direcciones[][];//Declaramos
una matriz de direcciones bidimensional que contendrá las direcciones y los
nombres de los clientes
DatagramPacket paq_recibir, paq_enviar;//Declaramos los paquetes de entrada de datos y de salida
de datos
DatagramSocket con_recibir, con_enviar;//Declaramos las conexiones de entrada y de salida de datos
Thread esperar;//hilo que ejecutará la función de recibir y enviar
paquetes
public
Form1()
{
initForm(); //inicializamos el formulario
//Inicializamos las variables
p_e=6530;//inicializamos el puerto de entrada el 6530
p_s=6531;//y
el puerto de salida el 6531 deben ser números menores de 65436.
edit3.setText(String.valueOf(p_e).toString());//escribimos los valores de los puertos de
entrada y de salida
edit4.setText(String.valueOf(p_s).toString());
direcciones= new String[7][2];//es una matriz
con nombres y direcciones
//Para cada elemento de la matriz
introduzco el nombre (componente 0)y la dirección
(Componente 1)
direcciones[0][0]="David
C";direcciones[0][1]="192.168.1.118";
direcciones[1][0]="David
M";direcciones[1][1]="129,137,163,182";
direcciones[2][0]="Marcos
M";direcciones[2][1]="129,137,163,182";
direcciones[3][0]="Leila";direcciones[3][1]="129,137,163,182";
direcciones[4][0]="Jordi";direcciones[4][1]="129,137,163,182";
direcciones[5][0]="Alí";direcciones[5][1]="129,137,163,182";
direcciones[6][0]="David
C";direcciones[6][1]="129,137,163,182";
label1.setBackColor(Color.fromCMYK(0,255,255,96));//Damos color rojo a la
etiqueta como desconectado
label1.setForeColor(Color.WHITE);//El color de letra de la etiqueta el blanco
label1.setText("DESCONECTADO");
try
{
edit1.setText(InetAddress.getLocalHost().toString());
}
catch(IOException ioe)
{
}
}
public
void actualizar_puertos()
{
p_e=Integer.parseInt(edit3.getText());
p_s=Integer.parseInt(edit4.getText());
edit3.setEnabled(false);
edit4.setEnabled(false);
Conectar();
}
public
void esperar_Paquetes()//Función
que esperará los paquetes de datos
{
while(true)
{
try
{
int longitud;//la información
viaja en forma de bytes
byte array[]=new byte[50];//Creamos una matriz
de bytes
paq_recibir=new DatagramPacket(array,array.length);//Creamos el paquete de recibir
con_recibir= new DatagramSocket(p_e);
con_recibir.receive(paq_recibir);//recibimos
la información de la conexión y lo metemos en el paquete
String datos = new String(array);//Convertimos los datos en una cadena de texto
longitud=datos.length();//guardamos la longitud de los
datos recibidos
recibir(datos);//Llamamos a la función recibir y le pasamos
como parámetro: datos
}
catch(IOException ioe)
{
}
}
}
public
void recibir(String paquete)
{
int
palabra=4;//fijo una variable para distinguir
instrucciones y la inicializo a 4 por ejemplo
String dato
= paquete;//Creo la cadena dato
if(dato.substring(0,5).equals("Reci_"))palabra=1;
if(dato.substring(0,5).equals("Cone_"))palabra=2;
if(dato.substring(0,5).equals("Desc_"))palabra=3;
switch(palabra)
{
case 1: break;
case 2: break;
case 3: break;
case 4: edit1.setText(edit1.getText()+"\n" + paq_recibir.getAddress().getHostName()+
" dice:"+"\n" + paq_recibir);//escribimos lo que recibe
break;
}
}
public
class EnEspera extends Thread //Creamos un
objeto hilo para ejecutar en paralelo la aplicación
{
public
void EnEspera()//El
constructor de la clase
{
}
public
void run()//Función que se
realiza al ejecutarse el hilo
{
esperar_Paquetes();
}
}
//Función Conectar
private
void Conectar()
{
try
{
con_enviar=
new DatagramSocket(p_s);//Creamos la conexión para
enviar
con_recibir=
new DatagramSocket(p_e);//Creamos la conexión para
recibir
}
catch(SocketException se)
{
}
esperar = new EnEspera();
esperar.start();
}
private
void Desconectar()
{
if(esperar!=null)
{
esperar.stop();
esperar=null;
}
}
public
void enviar(String texto,
String direccion, int p_s)
{
String
t=texto;
String
d=direccion;
int p=p_s;
try
{
byte array[]=t.getBytes();
paq_enviar= new DatagramPacket(array, array.length, InetAddress.getAllByName(d)[0],p);
con_enviar.send(paq_enviar);
}
catch(IOException io)
{
}
}
public
void dispose()
{
super.dispose();
components.dispose();
}
private
void Form1_click(Object source, Event e)
{
}
private
void radioButton1_checkedChanged(Object source, Event e)
{
if (radioButton1.getChecked())id_cliente=0;
actualizar_puertos();
}
private
void radioButton2_checkedChanged(Object source, Event e)
{
actualizar_puertos();
if (radioButton2.getChecked())id_cliente=1;
}
private
void radioButton3_checkedChanged(Object source, Event e)
{
if (radioButton3.getChecked())id_cliente=2;
actualizar_puertos();
}
private
void radioButton4_checkedChanged(Object source, Event e)
{
if (radioButton4.getChecked())id_cliente=3;
actualizar_puertos();
}
private
void radioButton5_checkedChanged(Object source, Event e)
{
if (radioButton5.getChecked())id_cliente=4;
actualizar_puertos();
}
private
void radioButton6_checkedChanged(Object source, Event e)
{
if (radioButton6.getChecked())id_cliente=5;
actualizar_puertos();
}
private
void radioButton7_checkedChanged(Object source, Event e)
{
if (radioButton7.getChecked())id_cliente=6;
actualizar_puertos();
}
private
void menuItem2_click(Object source, Event e)
{
Conectar();
statusBar1.setText("Conectado");
label1.setBackColor(Color.GREEN);
label1.setForeColor(Color.BLACK);
label1.setText("CONECTADO");
actualizar_puertos();
}
private
void menuItem3_click(Object source, Event e)
{
Desconectar();
statusBar1.setText("Desconectado");
label1.setBackColor(Color.fromCMYK(0,255,255,96));
label1.setForeColor(Color.WHITE);
label1.setText("DESCONECTADO");
actualizar_puertos();
}
private
void edit1_textChanged(Object source, Event e)
{
actualizar_puertos();
}
private
void menuItem5_click(Object source,
Event e)
{
actualizar_puertos();
Desconectar();
Application.exit();
}
private
void button1_click(Object source, Event e)
{
actualizar_puertos();
String t;
t=edit2.getText();
edit1.setText(edit1.getText()+"\n"+"Yo le digo a " + direcciones[id_cliente][0]+"\n"+t);
edit2.setText("");
edit2.focus();
enviar(t,direcciones[id_cliente][1],p_s);
}
private
void menuItem7_click(Object source, Event e)
{
edit3.setEnabled(true);
edit4.setEnabled(true);
}
private
void edit3_textChanged(Object source, Event e)
{
}
private
void edit4_textChanged(Object source, Event e)
{
}
/**
* 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();
Edit edit1 = new Edit();
Edit edit2 = new Edit();
Button button1 =
new Button();
RadioButton
radioButton1 = new RadioButton();
RadioButton
radioButton2 = new RadioButton();
RadioButton
radioButton3 = new RadioButton();
RadioButton
radioButton4 = new RadioButton();
RadioButton
radioButton5 = new RadioButton();
RadioButton
radioButton6 = new RadioButton();
RadioButton
radioButton7 = new RadioButton();
MainMenu
mainMenu1 = new MainMenu();
MenuItem
menuItem1 = new MenuItem();
MenuItem
menuItem2 = new MenuItem();
MenuItem
menuItem3 = new MenuItem();
MenuItem
menuItem4 = new MenuItem();
MenuItem
menuItem5 = new MenuItem();
StatusBar
statusBar1 = new StatusBar();
Label label1 = new Label();
MenuItem
menuItem6 = new MenuItem();
MenuItem
menuItem7 = new MenuItem();
Label label2 = new Label();
Edit edit3 = new Edit();
Label label3 = new Label();
Edit edit4 = new Edit();
private
void initForm()
{
edit1.setLocation(new Point(8, 32));
edit1.setSize(new Point(304, 176));
edit1.setTabIndex(0);
edit1.setText("edit1");
edit1.setMultiline(true);
edit1.addOnTextChanged(new EventHandler(this.edit1_textChanged));
edit2.setLocation(new Point(8, 208));
edit2.setSize(new Point(216, 20));
edit2.setTabIndex(1);
edit2.setText("");
button1.setLocation(new Point(224, 208));
button1.setSize(new Point(88, 24));
button1.setTabIndex(2);
button1.setText("Enviar");
button1.addOnClick(new EventHandler(this.button1_click));
radioButton1.setLocation(new Point(320, 8));
radioButton1.setSize(new Point(160, 24));
radioButton1.setTabIndex(9);
radioButton1.setText("David C");
radioButton1.addOnCheckedChanged(new EventHandler(this.radioButton1_checkedChanged));
radioButton2.setLocation(new Point(320, 40));
radioButton2.setSize(new Point(160, 24));
radioButton2.setTabIndex(8);
radioButton2.setText("David M");
radioButton2.addOnCheckedChanged(new EventHandler(this.radioButton2_checkedChanged));
radioButton3.setLocation(new Point(320, 72));
radioButton3.setSize(new Point(160, 24));
radioButton3.setTabIndex(7);
radioButton3.setText("Marcos M");
radioButton3.addOnCheckedChanged(new EventHandler(this.radioButton3_checkedChanged));
radioButton4.setLocation(new Point(320, 104));
radioButton4.setSize(new Point(160, 24));
radioButton4.setTabIndex(6);
radioButton4.setText("Leila");
radioButton4.addOnCheckedChanged(new EventHandler(this.radioButton4_checkedChanged));
radioButton5.setLocation(new Point(320, 136));
radioButton5.setSize(new Point(160, 24));
radioButton5.setTabIndex(5);
radioButton5.setText("Jordi");
radioButton5.addOnCheckedChanged(new EventHandler(this.radioButton5_checkedChanged));
radioButton6.setLocation(new Point(320, 168));
radioButton6.setSize(new Point(160, 24));
radioButton6.setTabIndex(4);
radioButton6.setText("Alí");
radioButton6.addOnCheckedChanged(new EventHandler(this.radioButton6_checkedChanged));
radioButton7.setLocation(new Point(320, 200));
radioButton7.setSize(new Point(160, 24));
radioButton7.setTabIndex(3);
radioButton7.setText("David C");
radioButton7.addOnCheckedChanged(new EventHandler(this.radioButton7_checkedChanged));
menuItem2.setText("Conectar");
menuItem2.addOnClick(new EventHandler(this.menuItem2_click));
menuItem3.setText("Desconectar");
menuItem3.addOnClick(new EventHandler(this.menuItem3_click));
menuItem4.setText("-");
menuItem5.setText("Salir");
menuItem5.addOnClick(new EventHandler(this.menuItem5_click));
menuItem1.setMenuItems(new MenuItem[]
{
menuItem2,
menuItem3,
menuItem4,
menuItem5});
menuItem1.setText("Archivo");
statusBar1.setBackColor(Color.CONTROL);
statusBar1.setLocation(new Point(0, 240));
statusBar1.setSize(new Point(489, 16));
statusBar1.setTabIndex(10);
statusBar1.setText("Desconectado");
label1.setBackColor(new Color(192,
0, 0));
label1.setLocation(new Point(8, 8));
label1.setSize(new Point(152, 16));
label1.setTabIndex(12);
label1.setTabStop(false);
label1.setText("");
menuItem7.setText("puertos");
menuItem7.addOnClick(new EventHandler(this.menuItem7_click));
menuItem6.setMenuItems(new MenuItem[]
{
menuItem7});
menuItem6.setText("configuración");
mainMenu1.setMenuItems(new MenuItem[]
{
menuItem1,
menuItem6});
/* @designTimeOnly mainMenu1.setLocation(new
Point(328, 240)); */
this.setText("Comunicador Aula de informatica");
this.setAutoScaleBaseSize(new Point(5, 13));
this.setClientSize(new Point(489, 256));
this.setMenu(mainMenu1);
this.addOnClick(new
EventHandler(this.Form1_click));
label2.setLocation(new Point(168, 8));
label2.setSize(new Point(24, 16));
label2.setTabIndex(15);
label2.setTabStop(false);
label2.setText("PE:");
edit3.setEnabled(false);
edit3.setLocation(new Point(192, 8));
edit3.setSize(new Point(40, 20));
edit3.setTabIndex(16);
edit3.setText("");
edit3.addOnTextChanged(new EventHandler(this.edit3_textChanged));
label3.setLocation(new Point(240, 8));
label3.setSize(new Point(24, 16));
label3.setTabIndex(13);
label3.setTabStop(false);
label3.setText("PS:");
edit4.setEnabled(false);
edit4.setLocation(new Point(264, 8));
edit4.setSize(new Point(40, 20));
edit4.setTabIndex(14);
edit4.setText("");
edit4.addOnTextChanged(new EventHandler(this.edit4_textChanged));
this.setNewControls(new Control[] {
edit4,
label3,
edit3,
label2,
label1,
statusBar1,
radioButton7,
radioButton6,
radioButton5,
radioButton4,
radioButton3,
radioButton2,
radioButton1,
button1,
edit2,
edit1});
}
//Función Principal
public
static void main(String args[])
{
Application.run(new Form1());
}
}