Servidor y Cliente UDP - echo test

Iniciado por BatchianoISpyxolo, 6 Febrero 2013, 16:30 PM

0 Miembros y 1 Visitante están viendo este tema.

BatchianoISpyxolo

Bueno, he codificado un cliente-servidor UDP pero mi servidor no logra recibir el paquete datagrama enviado por el cliente ._.

¿Alguna ayudita?

ClienteUDP,java
Código (java) [Seleccionar]
package proyecto.socketudp;
import java.net.*;
/** Ejemplo que implementa un cliente de eco usando UDP. */
public class ClienteUDP {
public static void main(String argv[]) {
if (argv.length != 3) {
System.err.println("Formato: ClienteUDP <maquina> <puerto> <mensaje>");
System.exit(-1);
}
DatagramSocket sDatagram = null;
try {
// Creamos el socket no orientado a conexión
// (en cualquier puerto libre)
sDatagram = new DatagramSocket();
// Establecemos un timeout de 30 segs
sDatagram.setSoTimeout(30000);
// Obtenemos la dirección IP del servidor
// (recibida en el primer argumento por linea de comandos)
InetAddress dirServidor = InetAddress.getByName(argv[0]);
// Obtenemos el puerto del servidor
// (recibido en el segundo argumento por linea de comandos)
int puertoServidor = Integer.parseInt(argv[1]);
// Obtenemos el mensaje
// (tercer argumento de la linea de comandos)
String mensaje = argv[2];

byte[] envInfo = new byte[1024];
      envInfo = mensaje.getBytes();
// Preparamos el datagrama que vamos a enviar y lo enviamos
DatagramPacket envPaquete = new DatagramPacket(
envInfo, envInfo.length,
dirServidor, puertoServidor
);
// Enviamos el datagrama
sDatagram.send(envPaquete);
System.out.println(
"CLIENTE: Enviando "
+ new String(envPaquete.getData()) + " a "
+ envPaquete.getAddress().toString() + ":"
+ envPaquete.getPort()
);

// Preparamos el datagrama de recepción
byte[] recInfo = new byte[1024];
DatagramPacket recPaquete = new DatagramPacket(recInfo, recInfo.length);
// Recibimos el mensaje
sDatagram.receive(recPaquete);
System.out.println(
"CLIENTE: Recibido "
+ new String(recPaquete.getData(), 0, recPaquete.getLength())
+ " de " + recPaquete.getAddress().toString() + ":"
+ recPaquete.getPort()
);
} catch (SocketTimeoutException e) {
System.err.println("30 segs sin recibir nada");
} catch (Exception e) {
System.err.println("Error: " + e.getMessage());
} finally {
// Cerramos el socket para liberar la conexión
sDatagram.close();
}
}
}


ServidorUDP.java
Código (java) [Seleccionar]
package proyecto.socketudp;

import java.net.*;
/** Ejemplo que implementa un servidor de eco usando UDP. */
public class ServidorUDP {
   public static void main(String argv[]) throws SocketException {
       if (argv.length != 1) {
           System.err.println("Formato: ServidorUDP <puerto>");
           System.exit(-1);
       }
       try {
           // Creamos el socket datagrama
           DatagramSocket sDatagram = new DatagramSocket(Integer.parseInt(arv[0]));
           // Establecemos un timeout de 30 segs
           sDatagram.setSoTimeout(30000);
           byte array[] = new byte[1024];
           DatagramPacket dgramRec, dgramEnv = null;
           while (true) {
               // Preparamos un datagrama para recepción
               dgramRec = new DatagramPacket(array, array.length);

               // Recibimos el mensaje
               sDatagram.receive(dgramRec);

               // Recabamos informacion
               String mensaje = new String(dgramRec.getData());
               InetAddress dirCliente = dgramRec.getAddress();
               int puertoCliente = dgramRec.getPort();

               System.out.println(
                   "SERVIDOR: Recibido "
                   + new String(dgramRec.getData(), 0, dgramRec.getLength())
                   + " de " + dirCliente.toString() + ":"
                   + puertoCliente
               );

               // Preparamos el datagrama que vamos a enviar
               dgramEnv = new DatagramPacket(
                   mensaje.getBytes(), mensaje.getBytes().length,
                   dirCliente, puertoCliente
               );

               // Enviamos el mensaje
               sDatagram.send(dgramEnv);
               System.out.println(
                   "SERVIDOR: Enviando"
                   + new String(dgramEnv.getData(), 0, dgramEnv.getLength())
                   + " de " + dgramEnv.getAddress().toString() + ":"
                   + dgramEnv.getPort()
               );
           }
       } catch (SocketTimeoutException e) {
           System.err.println("30 segs sin recibir nada");
       } catch (Exception e) {
           System.err.println("Error: " + e.getMessage());
       }
   }
}
Puede que desees aprender a programar desde 0: www.espascal.es

BatchianoISpyxolo

Me respondo a mí mismo por si a alguien más le ayuda.

Al construir el DatagramSocket del servidor debí haber especificado el puerto (que se pasa como primer y único argumento al servidor) en el constructor.
Puede que desees aprender a programar desde 0: www.espascal.es