Buen día, coders! El día de hoy vamos a resolver un caso propuesto que nos envió un seguidor de la página. Nos pide implementar un programa cliente-servidor usando Datagram Sockets. Para ello, vamos a ayudarnos del protocolo UDP
CASO PRÁCTICO
Implemente un programa cliente servidor usando sockets en java.
Observación:
Emplee el protocolo UDP
El Servidor UDP debe estar escuchando en un puerto determinado
Cree un cliente UDP para enviar los mensajes.
Recuerda que la conexión UDP no es orientada a conexión, es decir, el servidor en principio no sabe de dónde viene el mensaje, aunque lo puede saber mirando el datagrama que le llega. En otras palabras y comparando con la conexión TCP, UDP no necesita saber quién se conecta a él.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | package socket; import java.awt.BorderLayout; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.SwingUtilities; public class Servidor extends JFrame { private JTextArea areaPantalla; private DatagramSocket socket; // Configurar GUI y DatagramSocket public Servidor() { super("Servidor"); areaPantalla = new JTextArea(); getContentPane().add(new JScrollPane(areaPantalla), BorderLayout.CENTER); setSize(400, 300); setVisible(true); // Crear objeto DatagramSocket para enviar y recibir paquetes try { socket = new DatagramSocket(5000); // Le pasamos el puerto } catch (SocketException excepcionSocket) { // Procesar los problemas que pueden ocurrir al crear el objeto DatagramSocket excepcionSocket.printStackTrace(); System.exit(1); } } // Fin del constructor private void esperarPaquetes() { // Esperar a que lleguen los paquetes, mostrar los datos while (true) { // Iterar infinitamente try { // Establecer el paquete byte datos[] = new byte[100]; DatagramPacket recibirPaquete = new DatagramPacket(datos, datos.length); socket.receive(recibirPaquete); // esperar el paquete // Mostrar la información del paquete recibido mostrarMensaje("\nRecibido de " + recibirPaquete.getAddress() + " >> " + new String(recibirPaquete.getData(), 0, recibirPaquete.getLength())); } catch (IOException excepcionES) { excepcionES.printStackTrace(); } } } private void mostrarMensaje(final String mensajeAMostrar) { // mostrar el mensaje del subproceso de ejecución despachador de eventos SwingUtilities.invokeLater(new Runnable() { // Clase interna para asegurar que la GUI // se actualice apropiadamente public void run() { // Actualiza areaPantalla areaPantalla.append(mensajeAMostrar); } } // Fin de la clase interna ); // Fin de la llamada a SwingUtilities.invokeLater } public static void main(String args[]) { Servidor aplicacion = new Servidor(); aplicacion.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); aplicacion.esperarPaquetes(); } } // Fin de la clase Servidor |
Cliente
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | package socket; import java.awt.*; import java.awt.event.*; import java.io.*; import java.net.*; import javax.swing.*; public class Cliente extends JFrame { private JTextField campoIntroducir; private JTextArea areaPantalla; private DatagramSocket socket; // Configurar GUI y DatagramSocket public Cliente() { super("Cliente"); Container contenedor = getContentPane(); campoIntroducir = new JTextField("Escriba aquí el mensaje"); campoIntroducir.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evento) { // Crear y enviar el paquete try { areaPantalla.append("\nEnviando >> " + evento.getActionCommand() + "\n"); // Obtener mensaje del campo de texto y convertirlo en arreglo byte String mensaje = evento.getActionCommand(); byte datos[] = mensaje.getBytes(); // Crear enviarPaquete DatagramPacket enviarPaquete = new DatagramPacket(datos, datos.length, InetAddress.getLocalHost(), 5000); socket.send(enviarPaquete); // enviar paquete areaPantalla.append("Paquete enviado\n"); areaPantalla.setCaretPosition(areaPantalla.getText().length()); } catch (IOException excepcionES) { // Procesar los problemas que pueden ocurrir al crear o enviar el paquete excepcionES.printStackTrace(); } } // Fin de actionPerformed } // Fin de la clase interna ); // Fin de la llamada a addActionListener contenedor.add(campoIntroducir, BorderLayout.NORTH); areaPantalla = new JTextArea(); contenedor.add(new JScrollPane(areaPantalla), BorderLayout.CENTER); setSize(400, 300); setVisible(true); // Crear objeto DatagramSocket para enviar y recibir paquetes try { socket = new DatagramSocket(); } catch (SocketException excepcionSocket) { // Atrapar los problemas que pueden ocurrir al crear objeto DatagramSocket excepcionSocket.printStackTrace(); System.exit(1); } } // Fin del constructor de Cliente public static void main(String args[]) { Cliente aplicacion = new Cliente(); aplicacion.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } |
DESARROLLO TUS ALGORITMOS 🔥🔥
No hay comentarios, ¡cuéntame algo!
Me gustaría saber tu opinión. ¡Saludos!