EchoDatagramClient.java

package fr.umlv.ji.udp;
import java.io.*;
import java.nio.*;
import java.net.*;
import java.nio.charset.*;
import java.nio.channels.*;
/**
 * Un client Echo pour le protocole UDP. 
 */
public class EchoDatagramClient {
  /** Codage à utiliser pour émettre une chaîne de caractères. */
  public final static Charset charset = Charset.forName("ISO-8859-1");
  /** Méthode d'interrogation du serveur. Accepte sur la ligne de
      commande le nom et le port du serveur et le message à émettre. */
  public static void main(String[] args) throws IOException {
    if (args.length!=3) {
      System.err.println("Usage: " +
             "fr.umlv.ji.udp.EchoDatagramClient " +
             "<server> <port> <message>");
      System.exit(1);
    }
    // Création du canal
    DatagramChannel channel = DatagramChannel.open();
    int port = Integer.parseInt(args[1]);
    // Création de l'adresse de la socket distante
    SocketAddress server = new InetSocketAddress(args[0],port);
    try {
      // Pseudo-connection à la socket distante
      channel.connect(server);
      // Encodage des données à émettre
      ByteBuffer byteB = charset.encode(args[2]);
      // Envoi des données
      channel.write(byteB);
      // Création du tampon pour la réception
      byteB = ByteBuffer.allocate(byteB.capacity());
      // Réception des données
      channel.read(byteB);
      // Préparation du tampon pour le décodage
      byteB.flip();
      // Décodage puis affichage des données reçues
      CharBuffer charB = charset.decode(byteB);
      System.out.println(charB);
      // Fin de la pseudo-connection
      channel.disconnect();
    } finally { channel.close(); }
  }
}