Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Pitagoras en 15 Mayo 2022, 14:21 pm



Título: SOCKETS UDP Ayuda!!
Publicado por: Pitagoras en 15 Mayo 2022, 14:21 pm
Buenas, estoy haciendo un programa en java Cliente y Servidor con sockets UDP. El cliente y el servidor se deben de enviar mutuamente ( intercambiando mensajes ) la hora actual en el momento de ejecucion, y tambien deben de imprimir el número segundos transcurridos en el intercambio de mensajes(ESTO ULTIMO NO TENGO NI IDEA DE COMO LO PUEDO HACER). He hecho el codigo del intercambio de hora pero me da error. Si alguien porfavor me pudiese ayudar a saber donde esta el fallo y tambien si me puede ayudar a saber como puedo hallar los segundos transcurridos, estaría muy agradecida.

Codigo Cliente:

Código:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class ClienteUDPHora {

public static void main(String[] args) {

try {
DatagramSocket socketUDP = new DatagramSocket();
byte[] mensaje = args[0].getBytes();
InetAddress hostServidor = InetAddress.getByName(args[1]);
int puertoServidor = 5000;

//Construimos un datagrama para enviar el mensaje al Servidor
DatagramPacket peticion =
new DatagramPacket(mensaje, args[0].length(),
hostServidor, puertoServidor);
//Enviamos el datagrama
            SimpleDateFormat dateFormat=new SimpleDateFormat("[yyyy-MM-dd HH:mm:ss]");// Establecer el formato de fecha
            System.out.println("Fecha y hora enviadas al servidor: "+dateFormat.format(new Date()));

socketUDP.send(peticion);


//Construimos el datagrama que contendra la respuesta
byte[] buffer = new byte[1000];
DatagramPacket respuesta = new DatagramPacket(buffer, buffer.length);

socketUDP.receive(respuesta);

//Enviamos la respuesta del servidor a la salida estandar
System.out.println("Respuesta: "+ new String(respuesta.getData()));


//Cerramos el soccket
socketUDP.close();


} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}


Codigo Servidor:

Código:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class ServidorUDPHora {

public static void main(String[] args) {

try {
@SuppressWarnings("resource")
DatagramSocket socketUDP = new DatagramSocket(5000);
byte[] buffer = new byte[1000];

while(true) {
//Construimos el DatagramPacket para recibir peticiones
DatagramPacket peticion = new DatagramPacket(buffer, buffer.length);

//Leemos una peticion del DatagramSocket
socketUDP.receive(peticion);

System.out.println("Datagrama recibido del host: "+ peticion.getAddress());
System.out.println(" desde el puerto remoto: "+ peticion.getPort());

//Construimos el DatagramPacket para enviar la respuesta
DatagramPacket respuesta = new DatagramPacket(peticion.getData(), peticion.getLength(),
peticion.getAddress(), peticion.getPort());
           
SimpleDateFormat dateFormat=new SimpleDateFormat("[yyyy-MM-dd HH:mm:ss]");// Establecer el formato de fecha
            System.out.println("Fecha y hora enviadas al cliente: "+dateFormat.format(new Date()));

//Enviamos la respuesta, que es un eco
socketUDP.send(respuesta);
}

} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}



Título: Re: SOCKETS UDP Ayuda!!
Publicado por: K-YreX en 15 Mayo 2022, 15:55 pm
Citar
El cliente y el servidor se deben de enviar mutuamente ( intercambiando mensajes ) la hora actual en el momento de ejecucion

Qué significa:
Citar
He hecho el codigo del intercambio de hora pero me da error.
:huh: :huh:

En vez de "me da error" sería mejor que explicaras con más detalle el problema que tienes...
- Te da error de compilación o de ejecución? Qué error te muestra exactamente?
- El resultado que muestra no es el que esperas? Qué resultado esperas y qué te muestra el programa?
- ...

PD: El código que muestras no intercambia la fecha/hora actual. Está intercambiando el primer argumento de la ejecución args[0], por lo que...
¿Con qué argumentos estás ejecutando el Cliente?

Y qué quieres decir con esto:
Citar
tambien deben de imprimir el número segundos transcurridos en el intercambio de mensajes
:huh: :huh:

Qué tienes que imprimir y dónde?
- El tiempo que tarda el Servidor desde que arranca hasta que le llega un paquete?
- El tiempo que tarda el Servidor desde que arranca hasta que envía un paquete?
- El tiempo que tarda el Servidor desde que recibe un paquete hasta que envía otro?
- El tiempo que tarda el Cliente desde que arranca hasta que envía un paquete?
- El tiempo que...
- ...

Como puedes ver, puedes medir el tiempo de TODO lo que quieras. Entonces tendrás que especificar más en lo que necesitas.
De todas formas y de forma genérica, te contestaré lo mismo que la vez anterior:
Citar
Para obtener el tiempo transcurrido en una porción de código tienes que seguir los siguientes pasos:
  • Guardar el instante actual al principio de la porción de código a medir
  • Guardar el instante actual al final de la porción de código a medir
  • Obtener la diferencia entre ambos instantes