Bueno, he codificado un cliente-servidor UDP pero mi servidor no logra recibir el paquete datagrama enviado por el cliente ._.
¿Alguna ayudita?
ClienteUDP,java
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>"); }
try {
// Creamos el socket no orientado a conexión
// (en cualquier puerto libre)
// 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)
// 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)
byte[] envInfo = new byte[1024];
envInfo = mensaje.getBytes();
// Preparamos el datagrama que vamos a enviar y lo enviamos
envInfo, envInfo.length,
dirServidor, puertoServidor
);
// Enviamos el datagrama
sDatagram.send(envPaquete);
"CLIENTE: Enviando "
+ new String(envPaquete.
getData()) + " a " + envPaquete.getAddress().toString() + ":"
+ envPaquete.getPort()
);
// Preparamos el datagrama de recepción
byte[] recInfo = new byte[1024];
// Recibimos el mensaje
sDatagram.receive(recPaquete);
"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"); System.
err.
println("Error: " + e.
getMessage()); } finally {
// Cerramos el socket para liberar la conexión
sDatagram.close();
}
}
}
ServidorUDP.java
package proyecto.socketudp;
import java.net.*;
/** Ejemplo que implementa un servidor de eco usando UDP. */
public class ServidorUDP {
if (argv.length != 1) {
System.
err.
println("Formato: ServidorUDP <puerto>"); }
try {
// Creamos el socket datagrama
// Establecemos un timeout de 30 segs
sDatagram.setSoTimeout(30000);
byte array[] = new byte[1024];
while (true) {
// Preparamos un datagrama para recepción
// Recibimos el mensaje
sDatagram.receive(dgramRec);
// Recabamos informacion
int puertoCliente = dgramRec.getPort();
"SERVIDOR: Recibido "
+ new String(dgramRec.
getData(),
0, dgramRec.
getLength()) + " de " + dirCliente.toString() + ":"
+ puertoCliente
);
// Preparamos el datagrama que vamos a enviar
mensaje.getBytes(), mensaje.getBytes().length,
dirCliente, puertoCliente
);
// Enviamos el mensaje
sDatagram.send(dgramEnv);
"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"); System.
err.
println("Error: " + e.
getMessage()); }
}
}
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.