Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Comunicaciones mediante el
protocolo UDP
Contenido
Pág: 2
DISCA-UPV ReSiDiCo
Para poder recibir a través de un socket UDP es necesario que el socket escuche en
un puerto. Para ello, se crea un socket UDP mediante la orden:
Con esto cualquier datagrama que llegue al puerto 12345 puede ser recibido
mediante la orden ds.receive(p); siendo p un objeto de la clase
DatagramPacket.
Pág: 3
DISCA-UPV ReSiDiCo
Pág: 4
DISCA-UPV ReSiDiCo
Partiendo del proyecto anterior, cree ahora dos aplicaciones (cliente y servidor),
en la que el servidor proporciona la hora y el día a los clientes que lo soliciten.
setSoTimeout(int timeout);
Pág: 5
DISCA-UPV ReSiDiCo
InterruptedIOException
Hemos visto que las aplicaciones se comunican según el protocolo UDP mediante el
envío y recepción de datagramas que consisten básicamente en un buffer de bytes
que almacena el mensaje. Hasta ahora la información transmitida en las
comunicaciones entre clientes y servidores ha consistido únicamente en cadenas
de caracteres. Sin embargo, podríamos transmitir cualquier tipo de información
mediante su secuencia de bytes.
El objetivo de este apartado será transmitir entre las aplicaciones objetos java.
Para ello, deberemos convertir el objeto a transmitir en su secuencia de bytes, lo
cual se denomina serializar. Veremos cómo el lenguaje java nos permite hacerlo
de manera muy sencilla utilizando la interfaz Serializable.
package data;
import java.io.Serializable;
import java.util.Date;
Pág: 6
DISCA-UPV ReSiDiCo
this.date = date;
} // ctor
} // class Hora
Observe que para que los objetos que instancien esta clase puedan
convertirse en cadenas de bytes, la clase únicamente tiene que implementar la
interfaz Serializable definida en el lenguaje java.
Una vez disponemos del objeto recibido, observar que se ha utilizado la clase
base Object de la que deriva cualquier objeto java, podemos hacer el cast a la
clase que realmente se corresponde y utilizar sus métodos. En el caso de
nuestro cliente, tendrá que acceder al atributo date para obtener el String de la
hora y visualizarlo por pantalla:
System.out.println(((Hora)ObjetoRecibido).date.toString());
Pág: 7
DISCA-UPV ReSiDiCo
Pág: 8
DISCA-UPV ReSiDiCo
Seleccionar todos los paquetes y pulsar en el botón “next” para proceder con la
instalación.
Una vez instalado el editor WindowsBuilder los pasos para crear una aplicación con
interfaz gráfica son los siguientes:
Pág: 9
DISCA-UPV ReSiDiCo
package appGUI;
import java.awt.EventQueue;
import javax.swing.JFrame;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
AppGUI window = new AppGUI();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public AppGUI() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
Puede ejecutarse:
Pág: 10
DISCA-UPV ReSiDiCo
5. A partir de ahora, habrá que añadir los componentes a la nueva ventana y los
manejadores de los eventos. Puede hacerse directamente sobre el código o de
forma visual usando el editor gráfico que proporciona WindowsBuilder.
Para realizar el diseño de una interfaz gráfica como la mostrada en la figura previa
deberá ir añadiendo elementos de la Palette de componentes gráficos. Deberá
tener en cuenta los siguientes aspectos:
Pág: 11
DISCA-UPV ReSiDiCo
jButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
System.out.println("actionPerformed()");
}
);
• Pulsación del botón “Iniciar hilo para Recibir”: el manejo consistirá en crear un
hilo que se encargará de recibir por el socket creado los mensajes.
Pág: 12
DISCA-UPV ReSiDiCo
Pág: 13
DISCA-UPV ReSiDiCo
Pág: 14