import java.net.*;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;

public class HelloClient {
    public static void main(String[] args) {
        if (args.length < 2) {
            System.out.println("Usage: java HelloClient <nomServeur> <port>");
            return;
        }

        String nomServeur = args[0];
        int port = Integer.parseInt(args[1]);

        // Utilisation de try-with-resources pour fermer la socket automatiquement
        try (DatagramSocket socket = new DatagramSocket()) {
            InetAddress adresseServeur = InetAddress.getByName(nomServeur);

            //Préparer et envoyer le message "Bonjour"
            String message = "Bonjour du client Java";
            byte[] bufferEnvoi = message.getBytes();
            DatagramPacket paquetEnvoi = new DatagramPacket(bufferEnvoi, bufferEnvoi.length, adresseServeur, port);
            
            System.out.println("Envoi du message au serveur...");
            socket.send(paquetEnvoi);

            //Préparer la réception du numéro (un int = 4 octets)
            byte[] bufferReception = new byte[4];
            DatagramPacket paquetReception = new DatagramPacket(bufferReception, bufferReception.length);
            
            System.out.println("Attente de la réponse du serveur...");
            socket.receive(paquetReception);

            //Convertir les octets reçus en int (Little Endian pour matcher le C)
            int numeroAttribue = ByteBuffer.wrap(paquetReception.getData())
                                    .order(ByteOrder.LITTLE_ENDIAN)
                                    .getInt();

            System.out.println("Le numéro attribué par le serveur C est : " + numeroAttribue);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
